2016-10-19 37 views
1

所以,我只是在巨大的安全漏洞,我從來沒有真正意識到傳來:如何解決一般禁用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;安全地獲取數據?

回答

3

絕不信任用戶界面。

精明的用戶可以隨時修改您的用戶界面或創建自己的用戶界面。穿過電線的數據可能在飛行中被篡改。

業務邏輯層需要驗證所有數據。

我決定什麼樣的控制是可編輯取決於誰在訪問網站

您可以在瀏覽器中打開開發者工具(在IE /邊緣如按F12)的用戶的許可權和刪除任何控件上的只讀標誌。如果你關心的是一個精明的用戶繞過你的權限系統,這是不夠的。

+0

當然,正確的答案,但更容易的說,比經典的ASP.NET提供的如此厚的抽象層做... ...祝你好運OP! ;) – Lucero

+0

這個答案是如此真實,它應該是BLL的工作。懶惰試圖再次統治我。事情是,我決定哪些控件可以編輯,取決於訪問網站的用戶的權限。我的BLL驗證了我的對象的值,但沒有實現任何權限系統來驗證基於提交對象的用戶的輸入。讓我的BLL做所有這些事情使它變得更加重要。 – modiX

+2

@modiX,當它出來時,我切換到ASP.NET MVC並從未回頭。 ASP.NET webforms的沉重,複雜性,客戶端的不足等等,從來都不是我的一杯茶,看到這種帖子只是證實了我的選擇。祝你好運! – Lucero

相關問題