如何在HTML提交表单中添加assign csrf标记

时间:2017-11-28 08:34:14

标签: javascript jquery ajax csrf

我的网站目前正处于csurf保护之下。

我已经使用csrf令牌分配了所有的ajax调用,如下所示

"/data/someAPI?_csrf="+ $("#_csrf").val它对我所有的功能都很好。

但现在我正在编写一个文件上传功能,互联网上的大多数教程都使用sumbit表格来实现。

所以我写了类似

的内容

Node.js的

app.post('/upload', function(req, res) {
  if (!req.files)
    return res.status(400).send('No files were uploaded.');

  // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
  let sampleFile = req.files.sampleFile;

  // Use the mv() method to place the file somewhere on your server
  sampleFile.mv('/somewhere/on/your/server/filename.jpg', function(err) {
    if (err)
      return res.status(500).send(err);

    res.send('File uploaded!');
  });
});

解决

HTML

<html>
  <body>
    <form ref='uploadForm' 
      id='uploadForm' 
      action='http://localhost:8000/upload?_csrf=<your_csrf_token>"' 
      method='post' 
      encType="multipart/form-data">
        <input type="file" name="sampleFile" />
        <input type='submit' value='Upload!' />
    </form>     
  </body>
</html>

我在表单操作中直接分配了令牌,它运行正常。

1 个答案:

答案 0 :(得分:2)

您可以为_csrt令牌添加隐藏字段。这是示例代码

<html>
  <body>
    <form ref='uploadForm' 
      id='uploadForm' 
      action='http://localhost:8000/upload' 
      method='post' 
      encType="multipart/form-data">
        <input type="file" name="sampleFile" />
        <input type="hidden" name="_csrf" value="<your_csrf_token>" />
        <input type='submit' value='Upload!' />
    </form>     
  </body>
</html>