Node.js 避免nodejs中的csrf

Node.js 避免nodejs中的csrf,node.js,express,csrf,csrf-protection,Node.js,Express,Csrf,Csrf Protection,我对nodejs还是个新手!我已经写了一个代码来避免csrf,但是有些地方出了问题,我总是得到无效的csrf令牌的错误。有人能帮我吗? 这是我的nodejs文件的代码: var express = require('express'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser') var csrf = require('csurf') var csrfProtecti

我对nodejs还是个新手!我已经写了一个代码来避免csrf,但是有些地方出了问题,我总是得到无效的csrf令牌的错误。有人能帮我吗? 这是我的nodejs文件的代码:

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser')
var csrf = require('csurf')


var csrfProtection = csrf({ cookie: true })

// Create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

var app = express();

app.use(cookieParser())

app.use(express.static('public'));
app.get('/index.html', csrfProtection, function (req, res) {
  res.render('send', { csrfToken: req.csrfToken() });
})

app.post('/process_post', urlencodedParser, csrfProtection, function (req, res) {
   // Prepare output in JSON format
   response = {
      first_name:req.body.first_name,
      last_name:req.body.last_name
   };
   console.log(response);
   res.end(JSON.stringify(response));
})



var server = app.listen(8081, 'localhost', function () {
   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port)

})
这是我的html文件的代码:


名字:
姓氏:


我认为在隐藏值中设置令牌是有道理的,因为当我试图在浏览器中查看页面的源代码时,该值仍然是,而应该将其设置为随机值。

当响应延迟@alex时,您应该更改
res.render('send',{csrfToken:req.csrfToken()})
to
res.render('send',{csrfToken:req.csrfToken})。您将
req.csrfToken
视为一个函数,而实际上它只是一个变量。当响应延迟@alex时,您应该更改
res.render('send',{csrfToken:req.csrfToken()})
to
res.render('send',{csrfToken:req.csrfToken})。您将
req.csrfToken
视为一个函数,而实际上它只是一个变量。
  <form action = "http://127.0.0.1:8081/process_post" method = "POST">
 <input type="hidden" name="_csrf" value="<%=csrfToken%>">
     First Name: <input type = "text" name = "first_name"> <br>
     Last Name: <input type = "text" name = "last_name">
     <input type = "submit" value = "Submit">
  </form>