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

'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
};