小编典典

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

ajax

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

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

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


阅读 966

收藏
2020-07-26

共1个答案

小编典典

我建议拦截对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调用。

2020-07-26