Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否检测到隐藏的表单字段已更改?_.net_Asp.net Mvc 3_Security_Hidden Field - Fatal编程技术网

.net 是否检测到隐藏的表单字段已更改?

.net 是否检测到隐藏的表单字段已更改?,.net,asp.net-mvc-3,security,hidden-field,.net,Asp.net Mvc 3,Security,Hidden Field,我使用一个隐藏的表单字段来存储用户正在编辑的当前记录。如何防止用户更改该字段?MVC3的防伪助手是否有效,或者我是否需要自己开支票?请参见 建议使用散列并在回发时进行比较,以检查是否进行了更改。请参阅 建议使用散列并在回发时进行比较,以检查是否进行了更改。若要防止CSRF攻击,可以在表单部分使用Html.AntiForgeryToken帮助程序方法若要防止CSRF攻击,可以在表单部分使用Html.AntiForgeryToken帮助程序方法编辑 看来我误解了你的问题,对不起。 事实上,AntiF

我使用一个隐藏的表单字段来存储用户正在编辑的当前记录。如何防止用户更改该字段?MVC3的防伪助手是否有效,或者我是否需要自己开支票?

请参见

建议使用散列并在回发时进行比较,以检查是否进行了更改。

请参阅


建议使用散列并在回发时进行比较,以检查是否进行了更改。

若要防止CSRF攻击,可以在表单部分使用Html.AntiForgeryToken帮助程序方法

若要防止CSRF攻击,可以在表单部分使用Html.AntiForgeryToken帮助程序方法

编辑 看来我误解了你的问题,对不起。 事实上,AntiForgeryToken并不能帮助你预防这种情况。 您可以将这些不可编辑的信息存储在模型中(在我的示例中为Account类),而不公开它,也可以存储在会话中。您还可以在模型的属性中放置一些检查/事件引发,以检测不需要的版本

老掉牙的回答 您可以使用HtmlHelper方法

1/以您的形式:

@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        //Your other fields

        <p>
            @Html.AntiForgeryToken()
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
请注意,AntiForgeryToken仅适用于POST请求,并且必须明显启用Cookie:。

Edit 看来我误解了你的问题,对不起。 事实上,AntiForgeryToken并不能帮助你预防这种情况。 您可以将这些不可编辑的信息存储在模型中(在我的示例中为Account类),而不公开它,也可以存储在会话中。您还可以在模型的属性中放置一些检查/事件引发,以检测不需要的版本

老掉牙的回答 您可以使用HtmlHelper方法

1/以您的形式:

@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        //Your other fields

        <p>
            @Html.AntiForgeryToken()
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

请注意,AntiForgeryToken仅适用于POST请求,并且必须明显启用Cookie:。

与其尝试检查用户是否更改了任何内容,不如检查是否允许他们编辑提交的ID所指示的任何记录

如果允许他们编辑有问题的ID,就让他们编辑。如果没有,就不要。甚至不用担心他们是否更改了表单数据,这是一件小事


顺便说一句,反伪造代币实际上没有任何用途。

与其尝试检查用户是否更改了任何内容,不如检查他们是否被允许编辑提交的ID所指示的任何记录

如果允许他们编辑有问题的ID,就让他们编辑。如果没有,就不要。甚至不用担心他们是否更改了表单数据,这是一件小事


顺便说一句,反狂欢代币实际上没有任何用途。

答案提到将其存储在视图模型中。这指的是ViewBag吗?因为MVC的工作方式,ViewBag只会在页面的生命周期中出现。可以将viewmodel作为隐藏字段写入页面。您可以将字段写入会话,但是会有点混乱。答案提到将其存储在视图模型中。这指的是ViewBag吗?因为MVC的工作方式,ViewBag只会在页面的生命周期中出现。可以将viewmodel作为隐藏字段写入页面。你可以把字段写得乱七八糟。我知道有防伪助手。问题是帮助者是否有助于防止篡改隐藏的表单字段?事实上,我错了,我应该再读几遍你的问题:!刚刚编辑了我的答案。我知道有防伪助手。问题是帮助者是否有助于防止篡改隐藏的表单字段?事实上,我错了,我应该再读几遍你的问题:!刚刚编辑了我的答案。这个问题不是关于csrf攻击。这个问题不是关于csrf攻击。