【问题标题】:csrf protection only works on some post requestscsrf 保护仅适用于某些 post 请求
【发布时间】:2020-10-14 16:06:07
【问题描述】:

我将发布部分有效和无效的内容。 第一部分是工作部分

app.get('/createblogpost', function(request, response){

if(request.cookies.sessionid == request.session.id){
    response.render("createblogpost.hbs", {layout:'mainlogedin.hbs', token:request.csrfToken()})
}else{
    response.render("createblogpost.hbs", {token:request.csrfToken()})
}
})
<form method="POST" action="/addblog">
<div class="form-group">
    <label for="headline">Headline</label>
    <input class="form-control" type="text" id="headline" name="headline" required>
</div>
<div class="form-group">
    <label for="textarea">Content</label>
    <textarea class="form-control" id="textarea" name="textarea" rows="10" required></textarea>
</div>
<input type="hidden" name="_csrf" value="{{token}}">
<button type="submit" class="btn btn-primary mb-2">Create</button>
</form>

这部分不起作用,看起来差不多。

app.get('/uploadimage', function(request, response){

if(request.cookies.sessionid == request.session.id){
    response.render("uploadimage.hbs", {layout:'mainlogedin.hbs', token:request.csrfToken()})
}else{
    response.render("uploadimage.hbs", {token:request.csrfToken()})
}
})

<form method="POST" action="/addimage" enctype="multipart/form-data">
<div class="form-group">
    <label for="headline">Headline</label>
    <input class="form-control" type="text" id="headline" name="headline" required>
</div>
<div class="form-group">
    <label for="image" required>Choose a image</label>
    <input type="file" class="form-control-file" id="image" name="image" value="upload image" required accept="image/x-png,image/jpeg">
</div>
<input type="hidden" name="_csrf" value="{{token}}">
<button type="submit" class="btn btn-primary mb-2">Create</button>
</form>

登录和注销表单也可以正常工作,而其他一些表单则无法正常工作。我不知道是怎么回事。 我可以补充一点,当我查看 _csrf cookie 时,值不会改变。

【问题讨论】:

    标签: html node.js csrf


    【解决方案1】:

    我解决了,但我有点不确定是什么问题。我加了

    app.get('/uploadimage', csrfProtection, function(request, response)
    

    在代码中将 csrf 向上移动了一点,以便在其他所有内容之前调用它,以及我能想到的以及我在不同帖子中阅读的任何其他内容。我发布的代码仍然相同。在我的一个发布请求中确实需要一个令牌,但我只是将最年轻的令牌发送到该发布请求并将它也传递给那里的渲染。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 2014-02-19
      • 2013-08-25
      • 2021-03-02
      • 2013-10-07
      • 2015-02-15
      • 2015-10-15
      • 2019-01-25
      相关资源
      最近更新 更多