当前位置: 首页 > 面试题库 >

将X-CSRF-Token标头全局添加到XMLHttpRequest()的所有实例;

左凯定
2023-03-14
问题内容

我使用的是第三方库,其中XMLHttpRequest包含new XMLHttpRequest

这绕过了我的CSRF保护,并被我的rails服务器击落。

有没有一种方法可以在实例化时$('meta[name=csrf- token]').attr('content')向所有实例实例全局添加预定义的CSRF令牌()XMLHttpRequest


问题答案:

我建议拦截对send方法的调用:

(function() {
    var send = XMLHttpRequest.prototype.send,
        token = $('meta[name=csrf-token]').attr('content');
    XMLHttpRequest.prototype.send = function(data) {
        this.setRequestHeader('X-CSRF-Token', token);
        return send.apply(this, arguments);
    };
}());

这不会在实例化时添加标头,而是在发送请求之前添加标头。您 也可以 截取对的调用new XMLHttpRequest(),但这不会有帮助,因为您需要等待添加标头直到open被调用。

您可能还需要对请求的目标URL进行测试,以便仅在调用自己的api时添加标头。否则可能会导致令牌泄漏到其他地方,甚至可能中断不允许此标头的跨域CORS调用。



 类似资料:
  • 我使用的是一个第三方库,它生成了一个原始的和。 这绕过了我的CSRF保护,并被我的rails服务器击落。 是否有方法在实例化时向的所有实例全局添加预定义的CSRF令牌()?

  • Symfony中的默认CSRF预防是基于表单的(如果使用提供的表单生成器,则会自动发生)。然而,对于AJAX请求,手动将CSRF令牌附加到每个HTTP请求,然后手动检查每个请求,这是非常繁琐的。 一个好的方法是将令牌嵌入为HTTP标头,如本问题的注释中建议的那样。jQuery然后可以被配置为在每个请求中包含这个标头,如这里所述。 我的问题是如何在Symfony内最好地处理这个问题?我可以使用Twi

  • 问题内容: 我有一个ajax调用,其中我使用jQuery.ajax()向mvc操作发出请求。这一切都很好。但是由于某些形式具有文件控制,我将其从使用jQuery.ajax()更改为使用XMLHttpRequest通过HTML5 File API发送。 由于进行了此更改,因此MVC操作方法不再将其视为ajax请求。使用Fiddler2,我注意到它不再向请求添加“ X-Requested- With:

  • 配置Spring Security 3.2后,csrf。令牌未绑定到请求或会话对象。 这是Spring Security配置: login.jsp文件 它呈现下一个html: 结果是403 HTTP状态: 在一些调试之后更新,请求对象以良好的形式发出DelegatingFilterProxy,但在CoyoteAdapter的469行中,它执行请求。回收();这会删除所有属性。。。 我使用JDK 1

  • 我已经阅读了文档和所有相关的问题,但是Angular的XSRF机制对我来说仍然不起作用:我无法用自动附加的X-XSRF-TOKEN头发出POST请求。 我有一个角6应用程序与登录表单。 它是Symfony(PHP 7.1)网站的一部分,当Symfony提供Angular应用程序页面时,会发送正确的Cookie(): 我的app.module.ts包括正确的模块: 然后,在服务的方法中,我发出以下h

  • 问题内容: 澄清点:将自定义标头添加到我的jQuery ajax调用中没有任何问题,我想将我的自定义标头自动添加到所有ajax调用中。 如果您看看jquery $.ajax自定义http标头问题(不是我的问题),您将看到一个很好的示例,说明如何为每个ajax调用手动实现代码。 我想为所有jQuery ajax调用覆盖beforeSend。根据jQuery文档,我可以使用jQuery.ajaxSet