【问题标题】:How use CSRF with multi part form Not work如何将 CSRF 与多部分表单一起使用不起作用
【发布时间】:2019-03-05 23:12:54
【问题描述】:

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

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

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

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>

任何建议

感谢阅读

【问题讨论】:

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


    【解决方案1】:

    对于多张图片,您需要将 enctype 属性添加到表单中,如下所示:enctype="multipart/form-data"

    对于方法覆盖,您需要将方法类型以及 csrfToken 添加到操作查询字符串: action="/stories/{{storieEdit.id}}?_method=PUT&amp;_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>

    【讨论】:

    • 现在这项工作!!谢谢,但我有一个问题,请确保此表单在帖子的 url 中传递 csrf 令牌。我尝试通过方法覆盖将 url 和 csrf 令牌放入隐藏输入中。和中间件
    猜你喜欢
    • 2017-10-27
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多