JS防止XSS但允许HTML URL

时间:2018-06-04 09:19:18

标签: javascript xss

我有一个Angular 1应用,其中包含用于创建网站通知的表单输入。

用户可以输入完整网址http://example.com,也可以输入应用内的路径/foo/barboo

但是,攻击者也可以输入javascript:alert(1);//,当按下通知链接时,JS将会触发。

是否可以对此输入进行编码,但仍允许对其进行处理?

1 个答案:

答案 0 :(得分:2)

这是一个正则表达式,它将匹配以模式(http / https / ftp)开头的URI和以斜杠开头的“相对”URI:

/((\/[\w-.]+)(\/[\w-.]+)*\/?)|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi

const re = /((\/[\w-.]+)(\/[\w-.]+)*\/?)|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi

console.log("https://example.com/foo/bar".match(re)[0]); //matches 

console.log("/foo/bar/baz/bim".match(re)[0]); //matches

console.log("javascript:alert('xss');//".match(re)); //doesn't match (null)

console.log("/foo/bar/baz/bim.html".match(re)[0]); //matches

console.log("https://example.com/foo/bar-api.php?e=mc2".match(re)[0]); //matches

<强> regexr.com