Gil*_*ili 197 ajax jquery http-headers cors
JQuery和其他框架添加以下标头:
X-Requested-With:XMLHttpRequest
为什么需要这个?为什么服务器要以不同于正常请求的方式处理AJAX请求?
更新:我刚刚使用这个标题找到了一个真实的例子:https://core.spreedly.com/manual/payment-methods/adding-with-js.如果在没有AJAX的情况下请求支付处理器,它会在完成后重定向回原始网站.当使用AJAX请求时,不会进行重定向.
Sil*_*Fox 238
安全性的一个很好的理由 - 这可以防止CSRF攻击,因为未经服务器通过CORS同意,此标头无法添加到AJAX请求跨域.
跨域只允许以下标头:
- 接受
- 接受语言
- 内容语言
- 最后,事件ID
- 内容类型
任何其他人导致在CORS支持的浏览器中发出"飞行前"请求.
如果没有CORS,则无法添加X-Requested-With跨域XHR请求.
如果服务器正在检查此标头是否存在,则它知道该请求未从攻击者的域尝试使用JavaScript代表该用户发出请求.这还会检查请求是否未从常规HTML表单发布,如果不使用令牌,则很难验证它是否为跨域.(但是,检查Origin标题可能是支持的浏览器中的一个选项,但是您将使旧浏览器容易受到攻击.)
您可能希望将其与令牌结合使用,因为如果存在重定向步骤,则 OSX上的Safari上运行的Flash 可以设置此标头.它似乎也适用于Chrome,但现在已经过修复.此处有更多详细信息,包括受影
OWASP推荐将其与Origin和Referer检查相结合:
这种防御技术在跨站请求伪造的鲁棒防御部分4.3中有具体讨论.然而,早在2008年就已经记录了使用Flash的这种防御的绕过,并且最近在2015年由Mathias Karlsson在Vimeo中利用了CSRF漏洞.但是,我们认为Flash攻击无法欺骗Origin或Referer标头,因此通过检查它们,我们相信这种检查组合应该可以阻止Flash绕过CSRF攻击.(注意:如果有人可以确认或反驳这一信念,请告诉我们,以便我们更新此文章)
但是,由于已经讨论过的原因,检查Origin可能很棘手.
写了一篇关于CORS,CSRF和X-Requested的更深入的博客文章- 在这里.
EWi*_*Wit 24
请务必阅读SilverlightFox的答案.它突出了一个更重要的原因.
原因主要是如果您知道请求的来源,您可能需要稍微自定义它.
例如,假设您有一个拥有许多食谱的网站.并且您使用自定义jQuery框架根据他们单击的链接将配方滑动到容器中.链接可能是www.example.com/recipe/apple_pie
现在通常会返回整页,页眉,页脚,食谱内容和广告.但如果有人在浏览您的网站,其中一些部分已经加载.因此,您可以使用AJAX来获取用户选择的配方,但是为了节省时间和带宽,请不要加载页眉/页脚/广告.
现在,您可以为数据编写辅助端点,www.example.com/recipe_only/apple_pie但这样很难维护并与其他人共享.
但是更容易发现它是一个发出请求的ajax请求,然后只返回一部分数据.这样,用户浪费的带宽就会减少,而且网站的响应速度也会提高.
框架只是添加标题,因为有些人可能会发现跟踪哪些请求是ajax以及哪些不是ajax是有用的.但它完全依赖开发人员来使用这些技术.
它实际上类似于Accept-Language标题.浏览器可以请求网站请向我显示本网站的俄语版本,而无需在URL中插入/ ru /或类似内容.
Kor*_*clü 10
一些框架使用此标头来检测xhr请求,例如grails spring security使用此标头来标识xhr请求并提供json响应或html响应作为响应.
大多数Ajax库(从v2.1开始的Prototype,JQuery和Dojo)包含一个X-Requested-With标头,表示请求是由XMLHttpRequest发出的,而不是通过单击常规超链接或表单提交按钮来触发.
资料来源:http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html
| 归档时间: |
|
| 查看次数: |
155797 次 |
| 最近记录: |