ViewStatemacがASP.NETアプリケーションで有効になっている場合、ユーザーはViewStateの内容を変更して、サーバーに正常に戻すことができますか?
ORDER BY
ViewStateにあるものを使用してSQLクエリでパラメータ化されていない句を作成するアプリケーション(他の誰かが書いたもの)があります。SQLインジェクションについて心配する必要がありますか?
ViewStatemacがASP.NETアプリケーションで有効になっている場合、ユーザーはViewStateの内容を変更して、サーバーに正常に戻すことができますか?
ORDER BY
ViewStateにあるものを使用してSQLクエリでパラメータ化されていない句を作成するアプリケーション(他の誰かが書いたもの)があります。SQLインジェクションについて心配する必要がありますか?
ViewStateMACが有効になっている場合、攻撃者はViewStateを変更するために「マシンキー」を解読できる必要があるため、この値を非公開にすると、かなり安全になります。
ViewState["OrderBy"]
値は、コントロールを介してではなく、コードビハインド(例)に設定されていますか?その場合、これはイベント検証の対象にはなりません。
はい、ビューステートを変更してポストバックすることができます。ページをコピーしてローカルサイトにhtmlとして貼り付け、変更するだけです。
ただし、ポストバック時に、 EventValidationプロパティを開いている場合、検証は失敗し、asp.netによって受け入れられません。デフォルトで開いています。
asp.netは、このプロパティのページ上のすべてのコントロールとすべてのイベントのハッシュファイルを保存し、ポストバックで検証します。これが失敗した場合、続行されません。あなたがこれを近くに持っているなら、それはあなたが言うことをすることができます。
この単純なhtmlフォームを見てください:
<form name="input" action="someaction.asp" method="post">
<select name="sel">
<option value="1" >Milk</option>
<option value="2" >Coffee</option>
<option value="3" >Tea</option>
</select>
<input type="submit" value="Submit">
</form>
誰でもに変更し<option value="1" >Milk</option>
て<option value="1 OR 1=1" >Milk</option>
そのままポストイットできるので、レンダリングする前にハッシュコードを追加して、残りの部分と一緒にポストイットし、同じ値であることを検証する必要があります(同じハッシュを返します)。
一部のサイトやコーダーは、ポストバックのすべての値を暗号化することを選択します。たとえば、Amazonを見ると、次のような行に気付くでしょう。
<input name="offeringID.1" value="y3A0L7tSnS%2B7LBLvI....morehere" type="checkbox" id="fbt_x_check" style="display: none;" class="check" checked="checked">
また、カスタムhtmlコントロールを使用する場合は、変更を避けるために、値の個人的な検証を追加する必要があります。
asp.net開発者は、すべてのコントロールの合計ハッシュ値を作成し、それをEventValidationに保持することを決定しました。
したがって、EventValidationをオンのままにすると、変更は失敗します。