【问题标题】:CSRF & CORS with AngularJS + LaravelCSRF & CORS 与 AngularJS + Laravel
【发布时间】:2016-02-14 02:08:30
【问题描述】:

我正在开发一个带有 Laravel 后端的 AngularJS webapp。

我想通过跨域请求启用 CSRF 保护。有可能吗?

“跨站点请求伪造”中的$http reference 表示“不会为跨域请求设置标头”

查看开发人员工具日志,我看到在 $http.post 调用后发送了预检请求(选项动词)并且它设置了 XSRF-TOKEN cookie,但是 POST 请求没有 cookie,所以我不能这样做:

$http.defaults.headers.post['X-CSRFToken'] = $cookies['XSRF-TOKEN'];

有什么想法吗?

更新:

@zeroflagL:我试过了

$http.defaults.headers.common.xsrfCookieName = 'XSRF-TOKEN';
$http.defaults.headers.common.xsrfHeaderName = 'X-XSRF-TOKEN';

现在我在 POST 的请求标头中:

xsrfCookieName:XSRF-TOKEN
xsrfHeaderName:X-XSRF-TOKEN

但是 CSRF 检查没有通过(服务器上的 TokenMismatchException)。 我想在请求标头中应该有 XSRF-TOKEN 可以工作...

【问题讨论】:

  • 您是否按照文档中的说明设置了xsrfHeaderNamexsrfCookieName
  • @zeroflagL:我试过没有成功,更新了我的帖子
  • 删除headers.common. 只是$http.defaults.xsrf...
  • $http.defaults.headers.common.xsrf... 应该是正确的,如果我使用您的表单,则 POST 请求标头中没有设置任何内容。顺便说一句,这并不能解决问题
  • 示例:您有一个网站http://myweb.com。用户已登录。用户在另一个选项卡中打开站点http://evil.com。该邪恶网站嵌入了一个 URL 为 http://myweb.com/transferMoney 的图像标签。因为用户仍处于登录状态,所以会话 id 已发送,从服务器的角度来看,请求似乎没问题。如果客户端在http://anotherweb.com 上运行并向http://myweb.com 发出跨站点请求,则XSRF 不是问题,因为该请求似乎并非来自您的站点。

标签: angularjs ajax laravel cross-domain csrf


【解决方案1】:

作为 zeroflagL 表示 CSRF 保护不能应用于跨域请求。

回答我的问题:不,不可能。

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 2015-04-12
    • 2015-09-30
    • 2014-05-01
    • 2015-05-16
    • 2013-11-14
    • 2017-02-13
    • 2017-05-07
    • 2016-10-21
    相关资源
    最近更新 更多