1

假设我有一个RadioButtonList控件:

<asp:RadioButtonList ID="rdbSubscriptionType" runat="server">  
      <asp:ListItem Value="Eval" Selected="True">Evaluation</asp:ListItem>  
      <asp:ListItem Value="Monthly" Enabled="false">Monthly Subscription (not available yet)</asp:ListItem>  
      <asp:ListItem Value="Yearly" Enabled="false">Yearly Subscription </asp:ListItem>  
</asp:RadioButtonList> 

恶意用户确实可以使用POST操作 a ListItemwith提交到服务器Enabled = "false"。我想禁止这种行为。

在服务器端,我可以简单地检查:

if( rdbSubscriptionType.SelectedItem.Enabled == true)

但我不确定恶意用户是否也可以使用Javascript或类似技术从客户端更改控件的启用状态。是否有执行此验证的最佳实践?

4

2 回答 2

1

您需要考虑围绕“禁用”某项决定的业务规则。

如果您正在做的唯一检查是基于从前端返回的内容,那么您就有麻烦了。任何人都可以使用 FireBug 更改 html 值并将其发布到服务器。

在您的服务器端代码中,您遵循什么业务规则来确定提交表单的用户是否有权执行任何给定的操作?

您在 html 中说他们不允许按月订阅。你是根据什么商业基础做出这个决定的?一旦您清楚这一点,您就可以将其放入代码中并检查表单何时发布。

于 2012-04-19T11:58:12.020 回答
1

不,.Enabled无法使用 JavaScript 更改属性,您可以使用现有的东西(自己测试以确认)。也就是说,有一种更彻底的设置方法:

使用单独的模型填充 rdbSubscriptionType 项目集合(启用、值和显示文本),然后在服务器端与该模型进行比较,而不是与asp:RadioButtonList控件本身进行比较。

于 2012-04-19T11:58:44.530 回答