小编Mic*_*ooz的帖子

Laravel CSRF 保护下的 JQuery AJAX 跨站请求

我正在使用 Laravel(后端)和带有 JQuery(前端)的 ReactJS 构建一个类似 CMS 的 Web 应用程序。

我决定将现有的 Web API 放入一个单独的域(api.test.com)中,并且我的用户界面位于不同的域(test.com)上。

test.com上,我向api.test.com发起 ajax 请求以修改服务器上的某些资源:

  $.ajax({
    url: "api.test.com",
    method: 'POST',
    data: {...}
    success: function (no) {
    // ...
    }
  });
Run Code Online (Sandbox Code Playgroud)

当然,由于安全问题,这是非法的。但是,我可以配置我的网络服务器:

对于 Nginx:

  add_header Access-Control-Allow-Origin http://test.com;
  add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE;
  add_header Access-Control-Allow-Headers X-Requested-With,X-CSRF-TOKEN,X-XSRF-TOKEN;
Run Code Online (Sandbox Code Playgroud)

Access -Control-Allow-Origin问题已经完美解决,但是由于Laravel 的 CSRF保护而出现了另一个问题......

默认情况下,Laravel 要求请求中包含 CSRF 令牌(POST、PUT...这将修改资源)。

就我而言,我必须在api.test.com而不是test.com上生成csrf_token,因为不同的域不共享令牌。

我按照 Laravel 用户指南 并将这些代码添加到我的前端:

  $.ajax({
    url: "api.test.com/token", // simply return csrf_token();
    method: "GET",
    success: function (token) …
Run Code Online (Sandbox Code Playgroud)

php ajax jquery csrf laravel

5
推荐指数
1
解决办法
3954
查看次数

标签 统计

ajax ×1

csrf ×1

jquery ×1

laravel ×1

php ×1