X的点是什么?

JQuery和其他框架添加以下头文件:

X-Requested-With:XMLHttpRequest

为什么这需要? 为什么服务器希望以不同于正常请求的方式处理AJAX请求?

更新 :我刚刚找到了一个使用这个头文件的实例:https://core.spreedly.com/manual/payment-methods/adding-with-js。 如果付款处理器在没有AJAX的情况下被请求,它会在完成后重定向到原始网站。 当通过AJAX请求时,不会进行重定向。


一个很好的理由是安全性 - 这可以防止CSRF攻击,因为如果没有服务器通过CORS的同意,这个头不能被添加到AJAX请求跨域。

只有以下标题才可以跨网域:

  • 接受
  • 接受语言
  • 内容语言
  • 最后,事件ID
  • 内容类型
  • 任何其他人都会在CORS支持的浏览器中发出“预发布”请求。

    如果没有CORS,则无法将X-Requested-With添加到跨域XHR请求中。

    如果服务器正在检查该标题是否存在,它知道该请求不是从攻击者的域名尝试代表用户使用JavaScript发起请求发起的。 这还会检查请求是否未从常规HTML表单发布,其中很难验证其未使用令牌而不跨域。 (但是,在支持的浏览器中检查Origin标头可能是一个选项,尽管您会让旧浏览器易受攻击。)

    发现新的Flash旁路

    您可能希望将其与令牌结合使用,因为如果存在重定向步骤,则在OSX上的Safari上运行的Flash可以设置此标头。 它似乎也适用于Chrome,但现在已经修复。 这里包含更多细节,包括不同的版本。

    OWASP建议将此与Origin和Referer检查相结合:

    这种防御技术在Robust Defenses for Cross-Site Request Forgery 4.3节中有具体的讨论。 然而,早在2008年就已经记录了使用Flash的这种防御措施,而Mathias Karlsson最近在2015年也记录了Vimeo的CSRF漏洞。 但是,我们认为Flash攻击无法欺骗Origin或Referer头文件,因此通过检查两者,我们相信这些检查组合应防止Flash绕过CSRF攻击。 (注意:如果任何人都可以确认或驳斥此信念,请告诉我们,以便我们可以更新此文章)

    但是,由于已经讨论过检查Origin的原因可能会非常棘手。

    更新

    在CORS,CSRF和X-Requested-With这里撰写更深入的博客文章。


    确保你阅读SilverlightFox的答案。 它突出了一个更重要的原因。

    原因主要是,如果您知道请求的来源,您可能需要对其进行一些定制。

    例如让我们说你有一个网站有很多食谱。 并且您使用自定义jQuery框架将食谱基于他们点击的链接滑入容器。 链接可能是www.example.com/recipe/apple_pie

    现在通常会返回整页,页眉,页脚,配方内容和广告。 但是如果有人在浏览你的网站,那么这些部分已经被加载了。 因此,您可以使用AJAX获取用户选择的配方,但为了节省时间和带宽,不会加载页眉/页脚/广告。

    现在您只需为www.example.com/recipe_only/apple_pie数据编写次要端点,但难以维护并与其他人共享。

    但是,仅仅检测到它是发出请求的ajax请求,然后仅返回一部分数据更容易。 这样用户就浪费了更少的带宽,并且网站看起来更具响应能力。

    框架只是添加头部,因为有些人可能会发现跟踪哪些请求是ajax而哪些不是。 但它完全依赖于开发人员使用这种技术。

    它实际上类似于Accept-Language头。 浏览器可以请求一个网站,请告诉我一个俄罗斯版本的网站,而不必在URL中插入/ ru /或类似。


    有些框架使用这个头来检测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

    链接地址: http://www.djcxy.com/p/25807.html

    上一篇: What's the point of the X

    下一篇: Rails: How Does csrf