2011-06-02 57 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的代码。