我们有一个高度安全的应用程序,我们希望允许用户输入其他用户将看到的 URL。
这引入了 XSS 黑客攻击的高风险——用户可能会输入其他用户最终执行的 javascript。因为我们持有敏感数据,所以这种情况绝不能发生。
处理这个问题的最佳实践是什么? 任何安全白名单或逃逸模式本身就足够好吗?
关于处理重定向的任何建议(例如,在跟随链接之前,在警告页面上显示“此链接超出了我们的站点”消息)
是否有理由不支持用户输入的链接?
澄清:
基本上,我们的用户想要输入:
Stackoverflow.com
并将其输出到另一个用户:
<a href="http://stackoverflow.com">stackoverflow.com</a>
我真正担心的是他们在 XSS 黑客中使用这个,也就是说,他们输入:
警报(‘黑客入侵!’) ;
因此,其他用户得到了这个链接:
<a href="javascript:alert('hacked!');">stackoverflow.com</a>
我的例子只是为了解释风险——我很清楚 javascript 和 URL 是不同的东西,但是通过让它们输入后者,它们可能能够执行前者。
你会惊讶于有多少网站可以用这个技巧打破-HTML 是更糟糕的。如果他们知道处理链接,他们也知道消毒 <iframe>
,<img>
和聪明的 CSS 引用?
我工作在一个高度安全的环境-一个单一的 XSS 黑客可能会导致我们非常高的损失。我很高兴能够生成一个正则表达式(或者使用到目前为止最好的建议之一) ,它可以排除我能想到的所有东西,但是这就足够了吗?