我一直在检查csurf的Wiki,但它为空。该模块向用户请求添加了csrfToken()函数,但是,我应该如何使用它呢?

有人可以给出带有解释的代码示例吗?我应该在用户端做什么?我应该在服务器端做什么?

最佳答案

csurf中间件旨在拒绝没有有效 token 的包含有效负载(例如,主体参数)的请求。使用方法如下:

app.use(require('body-parser')());
app.use(require('cookie-parser')('YOUR SECRET GOES HERE'));
app.use(require('express-session')());

app.use(require('csurf')());

app.get('/some-form', function(req, res){
    res.send('<form action="/process" method="POST">' +
        '<input type="hidden" name="_csrf" value="' + req.csrfToken() + '">' +
        'Favorite color: <input type="text" name="favoriteColor">' +
        '<button type="submit">Submit</button>' +
        '</form>');
});

app.post('/process', function(req, res){
    res.send('<p>Your favorite color is "' + req.body.favoriteColor + '".');
});

尝试取出req.csrfToken()(或将其替换为其他内容);您会发现该表格不再起作用。

请注意,您需要 session 才能使csurf工作。如果要了解使用csurf的原因,请参阅cross-site request forgery (CSRF)上的Wikipedia文章。

07-24 17:44