Nodejs使自动csrf保护

Nodejs make automatic csrf protection

好吧,我正在构建简单的 nodejs cms。我的问题很简单,如何进行自动 CSRF 保护?因为我认为它很危险,而且我可能会在形式或路线上错过这种保护。有什么方法可以使这个过程自动化吗?

我现在正在用这个

Routes.js

// CSRF
var csrfProtection = csrf({
    cookie: true
})
var parseForm = bodyParser.urlencoded({
    extended: false
})

// Register
router.get("/register", csrfProtection, shouldNotBeAuthenticated, function (req, res) {
    res.render("../modules/users/views/register", {
        title: 'Register',
        csrfToken: req.csrfToken
    });
});

router.post("/register", parseForm, csrfProtection, authController.user_reigster);

表格

<form method="post" action="/users/register">
  <input type="hidden" name="_csrf" value="{{csrfToken}}">

封装 CSURF。

感谢任何建议。

我认为您的方向是正确的。

中间件应应用于所有 POST 请求*。 CSURF 自述文件中的示例显示了执行此操作的方法(值得仔细阅读):

// mount api before csrf is appended to the app stack
app.use('/api', api)

// now add csrf and other middlewares, after the "/api" was mounted
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(csrf({ cookie: true }))

您应该为用户界面使用模板语言。您应该有一个表单模板或一个过滤器,用于查找在呈现时在表单中包含 CSRF 属性的表单。

如果您制作 AJAX POSTs (XMLHttpRequest), that will also need to be thought through and is well covered on this .

* 如果你有 api 路由,应该将它们分组并从 CSRF 中排除。