一般来说,如何修复禁用的ASP.NET控件的不安全性?

时间:2016-10-19 22:44:50

标签: c# asp.net security webforms

所以我遇到了一个我从未真正意识到的巨大安全漏洞:

通常当我在任何控件上设置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都提供submitdisabledcontrols="false"

是否有任何通用方法可以在禁用时强制重置该值?在form上设置Enabled无效。

顺便说一下,在读取值之前询问Enabled是否安全,或者服务器端的客户端是否可以if(this.tbUsername.Enabled) obj.Username = this.tbUsername.Text;更改?即stack.yaml是否可以安全地获取数据?

1 个答案:

答案 0 :(得分:3)

永远不要相信用户界面。

精明的用户可以随时修改您的用户界面或创建自己的用户界面。穿越电线的数据可能会在飞行中被篡改。

业务逻辑层需要验证所有数据。

  

我决定哪些控件可以编辑,具体取决于访问网站的用户的权限

您可以在浏览器中打开开发人员工具(例如,按IE / Edge上的F12键)并删除任何控件上的只读标志。如果您关心绕过许可系统的精明用户,那就不够了。