【问题标题】:configure antiforgerytoken single use mvc asp.net配置 antiforgerytoken 单次使用 mvc asp.net
【发布时间】:2015-12-13 17:02:33
【问题描述】:

我想为每个请求修改 AntiForgeryToken。

我读了这些帖子:

最初的帖子明确排除了它,但后者似乎提到它“非常简单”。但是我不太明白如何实现令牌的一次性使用。

在我当前的实现中,我将令牌作为安全的 http-only cookie 交付。但它在整个会话中保持不变。我不在乎我的实现是否会破坏后退按钮。有什么建议吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc security csrf


    【解决方案1】:

    由于我们没有您的示例,因此不确定您是如何使用它的,但是像这样的简单表单确实会在表单中的每个请求上显示一个新令牌

    @using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)<fieldset>
        <legend>Person</legend>
    
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
    
        <div class="editor-label">
            @Html.LabelFor(model => model.Address)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address)
            @Html.ValidationMessageFor(model => model.Address)
        </div>
    
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset> }
    

    上面的表格向我展示了每个请求中的不同值,例如

    <input name="__RequestVerificationToken" type="hidden" value="53WW641jzT5QWcIrrLltqF0OGt79US1eBwue1MQU6lW200CxUiD6fcC949RZee4gcNrFNnaP5QYFi6lJd_QmuUqSfex7wWHwWjUC30_kVrI1" />
    

    &lt;input name="__RequestVerificationToken" type="hidden" value="QXHlA8N9g_95YbPeEpjPHhjQFV9IMNJf7eEdnPnADH9BPgQg_DQQKQqf9diPAxMQWJoBcT6FeXCIECe-Qd6Q6wA5BimVlU9K0C67nokzuXQ1" /&gt;

    有更多关于SO here的信息,还参考了其他详细信息outside here

    【讨论】:

    • 谢谢,但不是我专门问的。我知道在调用“@Html.AntiForgeryToken()”的地方会生成一个新令牌。但是我想知道的是,在服务器端,我如何拒绝包含以前使用过的验证令牌的请求。
    • 在当前的实现中,没有什么可以阻止客户端使用相同的防伪令牌多次提交相同的表单。它可重复使用。即使每次页面加载都会生成一个新的。 (或者即使在同一页面上多次调用@Html.AntiForgeryToken()
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 2010-11-23
    • 1970-01-01
    • 2013-07-22
    • 2013-02-05
    • 2012-06-06
    • 2018-05-27
    • 2011-01-02
    相关资源
    最近更新 更多