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アクションListItemを使用してサーバーに送信できますEnabled = "false"。この行為を禁止したいと思います。

サーバー側では、次のことを簡単に確認できます。

if( rdbSubscriptionType.SelectedItem.Enabled == true)

しかし、悪意のあるユーザーがJavascriptまたは同様の手法を使用して、クライアント側からもコントロールの有効状態を変更できるかどうかはわかりません。この検証を実行するためのベスト プラクティスはありますか?

4

2 に答える 2

1

何かを「無効化」するという決定を取り囲むビジネス ルールについて考える必要があります。

あなたが行っている唯一のチェックがフロントエンドから返されたものに基づいているなら、あなたは困っています。誰でも FireBug を使用して html 値を変更し、それをサーバーに送信できます。

サーバー側のコードで、フォームを送信したユーザーが特定のアクションを実行する権限を持っているかどうかを判断するために、どのビジネス ルールに従いますか?

あなたは HTML で、彼らが月額購読を行うことは許可されていないと言っています。これは、どのようなビジネス上の根拠に基づいて決定されますか? それが明確になったら、それをコードに入れて、フォームがいつ投稿されるかを確認できます。

于 2012-04-19T11:58:12.020 に答える
1

いいえ、.EnabledJavaScript でプロパティを変更することはできません。問題はありません (自分でテストして確認してください)。とはいえ、これを設定するより完全な方法があります。

別のモデルを使用して rdbSubscriptionType アイテム コレクション (有効、値、および表示テキスト) を設定し、サーバー側で、asp:RadioButtonListコントロール自体ではなく、そのモデルと比較します。

于 2012-04-19T11:58:44.530 に答える