2011-06-02 74 views
0

我想禁用一個按鈕,如果用戶沒有權限訪問它。我 禁止在Page_Load事件如何在禁用模式下保護按鈕?

Page_Load() { 
     if(!userhasrights) { 
      btn.Enabled=false; 
     } 
} 

但渲染asp.net後只是將其禁用的屬性。它 黑客可以很容易地設置爲「真」 &可以訪問按鈕禁用。我怎樣才能在禁用模式下保護我的按鈕?

回答

1

您無法保護按鈕的html狀態,因爲用戶可以隨時修改它。

按下按鈕時,您應該進行服務器端驗證,並將錯誤/警告返回給未被授權點擊的用戶。您仍然可以使用禁用狀態來實現可用性。

另一種解決方案是在用戶未被授權點擊時不生成按鈕。如果您確實需要禁用按鈕,請添加圖片而不是按鈕。

1

我勸你在JavaScript,但在服務器端使用如果...否則

在你的腳本應該是這樣的

if(userHasRights) 
{ 
     // display code for button 
} 
else 
{ 
     //display appropriate message 
} 
+0

感謝您的回覆。但是什麼是//顯示按鈕的代碼? – Tuscan 2011-06-02 06:20:40

+0

Button MySexyButton = new Button(); MySexyButton.Text =「只有選擇才能點擊meh」; AnyASP:Panel.Controls.Add或Append(MySexyButton);只需添加與.Text屬性相同的OnClick事件處理程序即可。更好的辦法是有一個ASP:面板和玩它的可見狀態,而不是編程按鈕自己... – eugeneK 2011-06-02 06:24:11

+0

使用<%=「這裏去你的HTML代碼」%>語法來輸出字符串 – footy 2011-06-02 06:31:22

1

而不是做不是在客戶端使用按鈕的Enable屬性,你應該使用Visible屬性來使它更安全,因爲如果一個控件的Visible屬性是false那麼它將不會呈現。所以不存在黑客行爲的問題。

Page_Load() { 
     if(!userhasrights) { 
      btn.Visible=false; 
     } 
} 
+0

但是,這可以很容易地由用戶在他的瀏覽器中執行一個簡單的JS。所以安全問題沒有解決。相反,我們不得不輸出按鈕的HTML代碼本身 – footy 2011-06-02 06:33:13

+0

@footy:如果控件的Visible屬性在這種情況下爲false,則不會呈現意味着它不會在HTML代碼中可用。 – jams 2011-06-02 06:38:07

+0

是的,它不會呈現,我同意。但爲什麼要冒這個風險呢?無論如何,如果腳本不涉及某種後端檢查方式,這一切都將毫無意義。 :) – footy 2011-06-02 07:01:52

0

根據知識和經驗,安全性應該儘可能接近您的代碼所需。

就像之前執行需要特殊previledge的代碼。

相關問題