gpt4 book ai didi

c# - 在 .NET 中,如何防止或处理在提交前篡改禁用字段的表单数据?

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:12 25 4
gpt4 key购买 nike

如果禁用的下拉列表动态呈现到页面,仍然可以使用 Firebug 或其他工具来篡改提交的值,并删除“禁用”的 HTML 属性。这段代码:

protected override void OnLoad(EventArgs e) {
var ddlTest = new DropDownList() {ID="ddlTest", Enabled = false};
ddlTest.Items.AddRange(new [] { new ListItem("Please select", ""), new ListItem("test 1", "1"), new ListItem("test 2", "2") });
Controls.Add(ddlTest);
}

呈现此 HTML 的结果:

<select disabled="disabled" id="Properties_ddlTest" name="Properties$ddlTest">
<option value="" selected="selected">Please select</option>
<option value="1">test 1</option>
<option value="2">test 2</option>

</select>

当我使用 Firebug 删除“禁用”属性并更改所选选项时出现问题。
在提交表单和重新创建字段时,新生成的控件在 OnLoad 结束时具有正确的值,但在 OnPreRender 中,它已假定已提交控件的身份并已被赋予已提交的表单值。
.NET 似乎无法检测到该字段最初是在禁用状态下创建的并且提交的值是伪造的。这是可以理解的,因为可能存在允许删除禁用属性的合法客户端功能。

除了蛮力方法之外,是否有其他方法可以检测到该字段的值不应该被更改?

我认为蛮力方法是一些废话,比如在 OnLoad 中的某个地方保存正确的值,然后在 OnPreRender 中恢复值。由于某些领域依赖于其他领域,这对我来说是 Not Acceptable 。

最佳答案

如果这确实是一个问题,则在服务器某处(可能在 session 中)保留一个值,该值指示该控件在页面的初始呈现时被设置为禁用。如果当页面回发时控件未处于禁用状态,那么您就知道表单已被篡改。

编辑

这可以防止客户端篡改,因为表单永远不会提交禁用的控件,因此修改后的数据永远不会到达服务器。请看http://w3.org/TR/html401/interact/forms.html#h-17.12 .

关于c# - 在 .NET 中,如何防止或处理在提交前篡改禁用字段的表单数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com