删除 API post 调用上的 csrf 保护

Posted

技术标签:

【中文标题】删除 API post 调用上的 csrf 保护【英文标题】:Remove csrf protecteion on API post calls 【发布时间】:2014-04-13 06:11:24 【问题描述】:

我想从我的 Express 3.0 应用程序中删除 csrf,因为我不需要它。我使用 oauth 来验证客户端。使用 express.csrf() 时将 API url 列入白名单的中间件吗?

【问题讨论】:

您仍然应该使用 CSRF 保护,因为 CSRF 攻击使用与有效客户端相同的授权。 【参考方案1】:

您可以通过两种方式做到这一点。

1.)创建一个自己的小中间件,让白名单url模式不被csrf之类的拦截;

var express = require("express");
var expressCsrf = express.csrf();
var app = express.createServer();

var customCsrf = function (req, res, next) 
    // I assume exact match, but you can use regex match here
  var csrfEnabled = true;
  var whiteList = new Array("/pattern1/param1","/pattern2/param2","/pattern3/param3");
  if (whiteList.indexOf(req.path) != -1) 
    csrfEnabled = false;
  

  if (csrfEnabled) 
    expressCsrf(req, res, next);
   else 
    next();
  


app.use(customCsrf);
app.listen(3000);

2.) 在您要启用的控制器上使用 csrf 中间件。例如,您想在配置文件保存控制器上使用 csrf 检查;

app.post("/profile/save", express.csrf(), function(req, res, next) 
    // put your code here
);

【讨论】:

以上是关于删除 API post 调用上的 csrf 保护的主要内容,如果未能解决你的问题,请参考以下文章

Ambari api POST 抱怨 CSRF 保护

Django 手动检查 CSRF 令牌

Laravel CSRF 保护与 REST API

如何为 Symfony3 上的 AJAX 调用添加 CSRF 保护?

Django ajax POST 扩展用于 CSRF 保护的 beforeSend 方法

保护 Web api 不被浏览器外部调用