You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
854 B
41 lines
854 B
'use strict'; |
|
|
|
var invalidPrototcolRegex = /^(%20|\s)*(javascript|data)/im; |
|
var ctrlCharactersRegex = /[^\x20-\x7E]/gmi; |
|
var urlSchemeRegex = /^([^:]+):/gm; |
|
var relativeFirstCharacters = ['.', '/'] |
|
|
|
function isRelativeUrl(url) { |
|
return relativeFirstCharacters.indexOf(url[0]) > -1; |
|
} |
|
|
|
function sanitizeUrl(url) { |
|
if (!url) { |
|
return 'about:blank'; |
|
} |
|
|
|
var urlScheme, urlSchemeParseResults; |
|
var sanitizedUrl = url.replace(ctrlCharactersRegex, '').trim(); |
|
|
|
if (isRelativeUrl(sanitizedUrl)) { |
|
return sanitizedUrl; |
|
} |
|
|
|
urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex); |
|
|
|
if (!urlSchemeParseResults) { |
|
return 'about:blank'; |
|
} |
|
|
|
urlScheme = urlSchemeParseResults[0]; |
|
|
|
if (invalidPrototcolRegex.test(urlScheme)) { |
|
return 'about:blank'; |
|
} |
|
|
|
return sanitizedUrl; |
|
} |
|
|
|
module.exports = { |
|
sanitizeUrl: sanitizeUrl |
|
};
|
|
|