4

ViewStatemacがASP.NETアプリケーションで有効になっている場合、ユーザーはViewStateの内容を変更して、サーバーに正常に戻すことができますか?

ORDER BYViewStateにあるものを使用してSQLクエリでパラメータ化されていない句を作成するアプリケーション(他の誰かが書いたもの)があります。SQLインジェクションについて心配する必要がありますか?

4

2 に答える 2

2

ViewStateMACが有効になっている場合、攻撃者はViewStateを変更するために「マシンキー」を解読できる必要があるため、この値を非公開にすると、かなり安全になります。

ViewState["OrderBy"]値は、コントロールを介してではなく、コードビハインド(例)に設定されていますか?その場合、これはイベント検証の対象にはなりません。

于 2012-11-09T12:50:09.747 に答える
1

はい、ビューステートを変更してポストバックすることができます。ページをコピーしてローカルサイトに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をオンのままにすると、変更は失敗します。

于 2012-11-08T08:08:41.760 に答える