我正在构建一个Web应用程序,用户可以动态创建HTML内容。允许他们创建以
我不知道为什么不安全——也许我只是有点多虑。(我的JavaScript代码没有特别处理
无论如何,我问这个问题的一个原因是,我正在使用Google Caja's html-sanitizer来消毒HTML。它过滤URL,但是默认过滤器如下:
也就是说,必须指定协议,只允许使用HTTP和HTTPS,不允许使用
(也就是说,
我想知道你是否认为
(例如,浏览器不会对类似 `href='#javascript:....' 的链接做出任何疯狂的事情吗?好像没有(至少我的浏览器没有),但也许还有其他...某些东西...我不知道)
#
开头的链接是否安全(例如,针对XSS攻击)?我不知道为什么不安全——也许我只是有点多虑。(我的JavaScript代码没有特别处理
#
URL。)无论如何,我问这个问题的一个原因是,我正在使用Google Caja's html-sanitizer来消毒HTML。它过滤URL,但是默认过滤器如下:
function urlX(url) { if(/^https?:\/\//.test(url)) { return url }}
也就是说,必须指定协议,只允许使用HTTP和HTTPS,不允许使用
javascript:
。我最近将URL过滤函数更改为:function urlX(url) {
if (/^https?:\/\//.test(url) || /^#/.test(url)) return url;
}
(也就是说,
#....
也是允许的。)我想知道你是否认为
#...
链接是安全的?(例如,浏览器不会对类似 `href='#javascript:....' 的链接做出任何疯狂的事情吗?好像没有(至少我的浏览器没有),但也许还有其他...某些东西...我不知道)
#
开头的链接,像这样的XSS漏洞也很容易被利用。如果您容易受到此类攻击,您应该真正修复实际漏洞。(这里涉及到一个通用的安全原则:永远不要将未经过滤的用户输入传递给DWIM函数,例如jQuery的$(...)
或PHP的fopen()
等。) - Ilmari Karonenhttp://yoursite.com#evil
并且它会通过。所以,锚点仍然在游戏中。 - p0deje