相关疑难解决方法(0)

处理安全性的最佳方法,并避免使用用户输入的URL进行XSS

我们有一个高安全性应用程序,我们希望允许用户输入其他用户将看到的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黑客可能会给我们造成很大的损失.我很高兴我可以制作一个正则表达式(或使用迄今为止的一个很​​好的建议),可以排除我能想到的一切,但这还够吗?

security xss url html-sanitizing

54
推荐指数
3
解决办法
4万
查看次数

getJSON()是否可以安全地调用不受信任的URL?

$.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 调用是否安全?如果在某些情况下它可能不安全,在什么条件下(例如浏览器版本)是安全/不安全的?

security xss jquery json getjson

7
推荐指数
1
解决办法
1299
查看次数

标签 统计

security ×2

xss ×2

getjson ×1

html-sanitizing ×1

jquery ×1

json ×1

url ×1