我使用的是一个第三方库,它生成了一个原始的XMLHttpRequest
和新的XMLHttpRequest
。
这绕过了我的CSRF保护,并被我的rails服务器击落。
是否有方法在实例化时向XMLHttpRequest
的所有实例全局添加预定义的CSRF令牌($('meta[name=csrf-token]').attr('content')
)?
我建议拦截对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令牌()? 问题答案: 我建议拦截对方法的调用: 这不会在实例化时添加标头,而是在发送请求之前添加标头。您 也可以 截取对的调用,但这不会有帮助,因为您需要等待添加标头直到被调用。 您可能还需要对请求的目标URL进行测试,以便仅在调
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:
我已经阅读了文档和所有相关的问题,但是Angular的XSRF机制对我来说仍然不起作用:我无法用自动附加的X-XSRF-TOKEN头发出POST请求。 我有一个角6应用程序与登录表单。 它是Symfony(PHP 7.1)网站的一部分,当Symfony提供Angular应用程序页面时,会发送正确的Cookie(): 我的app.module.ts包括正确的模块: 然后,在服务的方法中,我发出以下h
问题内容: 如何在我的Laravel应用程序的Ajax请求(GET或POST)中自动添加csrf令牌,而无需将其手动添加到每个请求中。 我的ajax请求 问题答案: 在Laravel中,默认情况下, csrf令牌元标记 的值会通过Axios HTTP库进行注册。但是,如果您 不使用此库 ,则需要为应用程序手动配置此行为。 为此,请将令牌存储在HTML元标记中 然后,一旦创建了meta标签,就可以指
我遵循指南:http://spring.io/guides/gs/rest-service/构建我的Rest服务示例,现在我正在尝试启用CSRF保护。我读到它应该默认启用,所以如果我不包括: http。csrf()。禁用() 在我的配置中,默认情况下应该启用CSRF保护,但情况似乎并非如此。问题是X-CSRF-TOKEN没有生成,也没有以任何方式包含在我的HTTP响应中。我应该怎么做,生成x-cs