所以,我只是在巨大的安全漏洞,我從來沒有真正意識到傳來:如何解決一般禁用ASP.NET控件的不安全性?
Usualy當我上的任何控制設置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"
不起作用。
順便說一句,在讀取值之前請求Enabled
還是可以在服務器端由客戶端更改Enabled
?即是if(this.tbUsername.Enabled) obj.Username = this.tbUsername.Text;
安全地獲取數據?
當然,正確的答案,但更容易的說,比經典的ASP.NET提供的如此厚的抽象層做... ...祝你好運OP! ;) – Lucero
這個答案是如此真實,它應該是BLL的工作。懶惰試圖再次統治我。事情是,我決定哪些控件可以編輯,取決於訪問網站的用戶的權限。我的BLL驗證了我的對象的值,但沒有實現任何權限系統來驗證基於提交對象的用戶的輸入。讓我的BLL做所有這些事情使它變得更加重要。 – modiX
@modiX,當它出來時,我切換到ASP.NET MVC並從未回頭。 ASP.NET webforms的沉重,複雜性,客戶端的不足等等,從來都不是我的一杯茶,看到這種帖子只是證實了我的選擇。祝你好運! – Lucero