如何修复禁用ASP的不安全性.. NET控件
本文关键字:不安全 安全性 NET 控件 ASP 何修复 | 更新日期: 2023-09-27 18:13:47
所以我刚刚遇到了一个我从未真正意识到的巨大安全漏洞:
通常当我在任何控件上设置Enabled = false
时,我会假设它根本不允许我修改控件上的值。然而,当客户端删除标记disabled="disabled"
以及类aspNetDisabled
,从而发布一个不同的值,ASP。. NET将接受它,即使在服务器端禁用了我的控件。
ASPX例子:
<asp:TextBox ID="tbUsername" runat="server" CssClass="form-control focus-popover required" MaxLength="32" Enabled="false" Text="test" />
<asp:Button ID="bSave" runat="server" CssClass="bb btn btn-primary btn-block" Text="Submit" OnClick="bSave_Click" />
后台代码示例:
protected void bSave_Click(object sender, EventArgs e)
{
Console.Write(this.tbUsername.Text); // BREAKPOINT HERE
}
经过进一步的检查,我发现我可以设置ReadOnly = true
,无论张贴什么,都将重置值。ReadOnly
不能在所有WebControl
上使用。
是否有任何通用的方法来强制重置值时,它被禁用?在form
上设置submitdisabledcontrols="false"
没有效果。
Btw,在读取值之前请求Enabled
是安全的吗?或者Enabled
可以由客户端在服务器端更改吗?即if(this.tbUsername.Enabled) obj.Username = this.tbUsername.Text;
安全获取数据吗?
永远不要相信UI。
精明的用户总是可以修改你的用户界面或者创建他们自己的用户界面。传输的数据可能在飞行中被篡改。
业务逻辑层需要验证所有数据。
我决定哪些控件是可编辑的,这取决于访问网站的用户的权限
您可以在浏览器中打开开发人员工具(例如在IE/Edge上按F12)并删除任何控件上的只读标志。如果你在意一个精明的用户绕过你的权限系统,这是不够的。