Javascript JS阻止XSS但允许HTML URL

Javascript JS阻止XSS但允许HTML URL,javascript,xss,Javascript,Xss,我有一个Angular 1应用程序,带有用于创建站点通知的表单输入 用户可以输入完整的urlhttp://example.com或者他们也可以在应用程序中输入路径/foo/barboo 但是,攻击者也可以输入javascript:alert(1)//

我有一个Angular 1应用程序,带有用于创建站点通知的表单输入

用户可以输入完整的url
http://example.com
或者他们也可以在应用程序中输入路径
/foo/barboo

但是,攻击者也可以输入
javascript:alert(1)//

是否可以对该输入进行编码,但仍然允许url被视为这样?

这里有一个正则表达式,它将匹配以架构(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
控制台日志(“https://example.com/foo/bar“.match(re)[0])//比赛
console.log(“/foo/bar/baz/bim.match(re)[0])//比赛
log(“javascript:alert('xss');/”.match(re))//不匹配(空)
log(“/foo/bar/baz/bim.html”.match(re)[0])//比赛

控制台日志(“https://example.com/foo/bar-api.php?e=mc2“.match(re)[0])//匹配项
为什么需要它们才能使用相对链接?这将使一切变得更加容易,你可以用正则表达式检查输入。恐怕我不知道设计决策,这是我5或6年前被要求做的事情。如果我愿意,我会改变一切could@pgGriff我的回答对你有帮助吗?