このようなボタンはブラウザにレンダリングされません。悪意のあるユーザーが、非表示のボタンによって定義されたアクションをトリガーできる方法はありますか? WebForm_DoPostBackWithOptions
たとえば、 ?への JavaScript 呼び出しを使用します。ASP.NET は、レンダリングされていなくても、このボタンによってトリガーされたように見える POST を受け入れますか?
3 に答える
短い答えはい。
ユーザー入力 (この場合は投稿) から受け取ったデータが有効であることを確認するのは、常にあなた (開発者) 次第です。asp.netフレームワークは、「疑わしい投稿値」など、多くの検証を行うと言っていました。
表示するページに送信ボタンがない場合でも、Web エンドポイントへの投稿を作成することができます。
編集
これは、あいまいさによるセキュリティの例であり、一般的にベスト プラクティスではありません。Asp.Net の「送信」ボタンは、 という非表示のフォーム フィールドを変更します__EVENTTARGET
。asp.net ハンドラーは、ボタン クリックの「イベント」を決定するときに、このフィールドを検査します。攻撃者がイベント ターゲットの名前を知っていた場合、この値はスプーフィングされる可能性があります。
UI 要素の非表示/表示は、ユーザー エクスペリエンスの向上に役立ちますが、ビジネス アクションを実行する前に、(サーバー上で) ユーザー入力を常に検証する必要があります。
レンダリングされていない場合、ポストバックを受け入れるべきではないと思います。.net は、ページ上の非表示フィールドを使用して、どのコントロールがページ上にあったかを認識し、ポストバック中にそれを確認できるため、何がポストバックをトリガーしたかがわかります。コントロールが最初から存在しない場合は、それを受け入れるべきではありません。
はい、これは間違いなく可能です。ASP.NET は、表示されているかどうかにかかわらず、ページで定義されたコントロールのすべての POST 値を受け入れます。「読み取り専用」に設定されているテキストフィールドなどにも注意してください。投稿後に使用しないでくださいreadonlyControl.Text
。最後に設定したときと同じ値になると信じてください。
Chrome 開発者ツール、Fiddler などを使用して ASP.NET で送信を実行したときに投稿される内容を見てください。「非表示」のテキスト フィールドに独自の値を追加する方法を理解できるはずです。