使用 $.support.cors = true 是不是安全?在 jQuery 中?

Posted

技术标签:

【中文标题】使用 $.support.cors = true 是不是安全?在 jQuery 中?【英文标题】:Is it safe to use $.support.cors = true; in jQuery?使用 $.support.cors = true 是否安全?在 jQuery 中? 【发布时间】:2011-12-12 17:25:55 【问题描述】:

我试图使用 jQuery 的 ajax 方法访问不同域上的 Web 服务。在做了一些研究之后,看起来它不允许这是为了防止跨站点脚本而设计的。

我遇到了一个解决方法,就是要包含这一行:

$.support.cors = true;

在我的 javascript 代码的顶部。据我了解,这可以在 jQuery 中实现跨站点脚本。

拥有这行代码是否会使我的网站更容易受到攻击?我一直听说 XSS 是一个安全问题,XSS 有合法用途吗?

【问题讨论】:

背景:api.jquery.com/jQuery.support 我不认为设置 启用 任何东西。它只是告诉 jQuery 支持什么 @Pekka - 您链接的文档恰恰相反。 @Alvaro 您没有通过设置该变量来启用 CORS。您只需告诉 jQuery 您处于可以进行跨域 XHR 请求的环境中。 (所以,当然,您可以在 jQuery 中使用它们,这很公平。) 【参考方案1】:

XSS 不是可以在 jQuery 中启用的功能。如果 jQuery 核心存在 XSS 漏洞,这将是非常非常不寻常的,但这是可能的,它被称为DOM-based XSS。

“跨域资源共享”或 CORS 与 XSS 不同,但是,但如果 Web 应用程序存在 XSS 漏洞,那么攻击者将拥有类似 CORS 的访问权限该域上的资源。简而言之,CORS 让您可以控制如何破解same origin policy,这样您就不需要引入完整的 XSS 漏洞。

$.support.cors 查询功能依赖于Access-Control-Allow-Origin HTTP 响应标头。这可能是一个漏洞。例如,如果 Web 应用程序的每个页面上都有Access-Control-Allow-Origin: *,那么攻击者将拥有与 XSS 漏洞相同的访问级别。注意你在哪些页面引入了 CORS 标头,并尽量避免使用*

所以回答您的问题: Web 应用程序永远不需要引入 XSS 漏洞,因为有办法绕过 SOP,例如 CORS/jsonp/cross domain proxies/access-control-origin。

【讨论】:

如果您有一个只想启用的简单 GET 并且您在网站上有子域,那么您如何在链接中使用默认的 :visited 样式行为。你没有给出你的哲学。 @kitgui.com 我不知道你在问什么或者它与安全性有什么关系。 在 phonegap for android 中,访问控制来源通常设置为“*”,但在预期的移动设备上。你的意思是这是一个问题? CORS 始终是服务器端的。 Android 有自己的方式来违反其浏览器应用程序的 SOP。这确实是一个不同的问题,但这里的理由是,通过安装应用程序,用户已授予浏览器应用程序独立于 SOP 运行的权限,这对于用 Java 编写的应用程序来说是正确的。【参考方案2】:

只有在浏览器中启用了 CORS 但 jQuery 还不支持它时,它才会有所帮助:

在不支持的环境中启用跨域请求 cors 但确实允许跨域 XHR 请求(Windows 小工具等), 设置 $.support.cors = true;。 CORS WD

仅将此属性设置为 true 不会导致安全漏洞。

【讨论】:

【参考方案3】:

当黑客能够注入脚本代码以将请求更改到另一个域时,他也能够在脚本中设置此 javascript 标志。

因此,在入侵的这一点上,是否设置了这个标志并没有太大变化。

【讨论】:

这确实不能回答问题。在入侵点,所有赌注都被取消;但我们的想法是防止这种情况发生。

以上是关于使用 $.support.cors = true 是不是安全?在 jQuery 中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 $.support.cors 在 IE 11 中为假?

Internet Explorer 中允许的 Ajax 跨域请求

Web Api使用Get返回DataSet

Web Api 跨域处理

ie8 的 ajax 无效

使用 jQuery 从跨域 Ajax 请求接收 XML 响应