如何将CSRF与多份表单一起使用

时间:2018-09-30 18:44:47

标签: node.js express csrf multer csrf-protection

我尝试构建一个上载图像的表单,但是当使用csrf时,此功能对我有用,我正在阅读的表单enctype标记中需要此代码:

<form method="post" action="/?_csrf=<%=csrfToken%>">

这对我有用,但是如果只想保存一张图像,但是如果要编辑或删除,则不起作用,因为使用覆盖方法?_method = PUT并与我一起返回URl CSRF

http://localhost:3030/stories/5bafe7a5abe3a7110c5f386b?_csrf=wkhEeV2x-06M_KPnZRoSTPJ3mUZSnuZ6dl7s

Cannot POST

<form class="col s12" action="/stories/{{storieEdit.id}}?_csrf={{csrfToken}}"  enctype="multipart/form-data" method="POST">
      <input type="hidden" name="_method" value="PUT">

        <div class="row">
          <div class="file-field input-field  col s12">
            <div class="btn">
              <span>File</span>
              <input type="file" name="fileUpload" onchange="previewFile()">
            </div>
            <div class="file-path-wrapper">
              <input class="file-path validate" type="text">
          
                <img src="/uploads/{{storieEdit.image}}" alt="Image" style="width: 25rem;">
               
            </div>
          </div>
        </div>
        </form>

任何建议

感谢阅读我

1 个答案:

答案 0 :(得分:0)

对于多个图像,您需要像这样enctype="multipart/form-data"

添加到表单编码属性中

对于方法重写,您需要将方法类型以及csrfToken添加到操作查询字符串: action="/stories/{{storieEdit.id}}?_method=PUT&_csrf={{csrfToken}}"

我有类似的代码,并且工作正常。 在下面,您可以直接在代码中找到所需的更改。

<form class="col s12" enctype="multipart/form-data" action="/stories/{{storieEdit.id}}?_method=PUT&_csrf={{csrfToken}}"  enctype="multipart/form-data" method="POST">
      <input type="hidden" name="_method" value="PUT">

        <div class="row">
          <div class="file-field input-field  col s12">
            <div class="btn">
              <span>File</span>
              <input type="file" name="fileUpload" onchange="previewFile()">
            </div>
            <div class="file-path-wrapper">
              <input class="file-path validate" type="text">
          
                <img src="/uploads/{{storieEdit.image}}" alt="Image" style="width: 25rem;">
               
            </div>
          </div>
        </div>
        </form>