[解決済み] クライアントから危険な可能性のあるRequest.Formの値が検出された
質問
を含む何かを投稿するたびに、ユーザーは
<
または
>
という例外がスローされます。
誰かがテキストボックスに文字を入力したために例外をスローしたり、Webアプリケーション全体をクラッシュさせることのスマートさについて議論するつもりはありませんが、私はこれを処理するエレガントな方法を探しているのです。
例外をトラップして表示する
<ブロッククオートエラーが発生しました。もう一度、フォーム全体を入力し直してください。
は、プロフェッショナルとは言えないと思うのですが。
ポストバリデーションを無効にする(
validateRequest="false"
を使用すると、このエラーを確実に回避できますが、多くの攻撃に対して脆弱なページが残ります。
理想は HTML 制限文字を含むポストバックが発生したとき、Form コレクションに投稿された値は自動的に HTML エンコードされます。
そのため
.Text
プロパティは次のようになります。
something & lt; html & gt;
ハンドラからこれを行う方法はありますか?
どのように解決するのですか?
投稿されたデータをすべてエンコードしようとするのは、間違った方向から攻めているのではないでしょうか。
なお、"
<
は、データベースのフィールド、設定、ファイル、フィードなど、他の外部ソースから来ることもできます。
さらに、"
<
は、本来は危険なものではありません。危険なのは、HTML出力にエンコードされていない文字列を書く場合(XSSのため)という特殊な状況においてのみです。
他の文脈では、異なる部分文字列は危険です。例えば、ユーザーが提供したURLをリンクに書き込む場合、部分文字列 "
javascript:
は危険かもしれません。一方、シングルクォート文字は、SQLクエリで文字列を補間する場合には危険ですが、フォームから送信された名前やデータベースのフィールドから読み込んだ名前の一部であれば、完全に安全です。
要するに、ランダムな入力に対して危険な文字をフィルタリングすることはできないということです。なぜなら、どんな文字でも適切な状況下では危険である可能性があるからです。ある特定の文字が、特別な意味を持つ別のサブ言語に渡るために危険になる可能性がある時点で、エンコードする必要があります。HTMLに文字列を書くときは、Server.HtmlEncodeを使って、HTMLで特別な意味を持つ文字をエンコードすべきです。動的なSQL文に文字列を渡す場合は、異なる文字をエンコードする必要があります(あるいは、プリペアドステートメントなどを使ってフレームワークに任せるのがよいでしょう)。
いつ
を設定すると、HTMLに渡す文字列はすべてHTMLエンコードされるようになります。
ValidateRequest="false"
の中に
<%@ Page ... %>
ディレクティブを
.aspx
ファイルを作成します。
.NET 4では、もう少しの工夫が必要かもしれません。時には
<httpRuntime requestValidationMode="2.0" />
をweb.configに追加してください(
参照
).
関連
-
ASP.NET Core 6で依存関係を解決する3つの方法
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
Net Core HttpClient処理 レスポンス圧縮の詳細
-
[解決済み] クライアントから危険な可能性のあるRequest.Pathの値が検出されました(*)
-
デバッグエラー蓄積
-
一時的なクラスを生成できない(result=1)、問題の解決方法
-
[解決済み] IIS 500.19 with 0x80070005 The requested page cannot be accessed because the related configuration data for the page is invalid error.
-
[解決済み】XKCDコミック「Bobby Tables」のSQLインジェクションはどのように動作するのでしょうか?
-
[解決済み] Visual StudioのApp_Dataフォルダは何に使うのですか?
-
[解決済み] WatiNかSeleniumか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
30分でわかるコング経由の.NETゲートウェイ
-
再起動を伴わないNET5の設定変更は自動的に反映される
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] IIS7 の「クラシック」パイプラインモードと「統合」パイプラインモードの違いは何ですか?
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み】ASP.NETのWebサイト全体のブラウザキャッシュを無効にする
-
[解決済み】ASP.NET Bundles ミニフィケーションを無効にする方法
-
[解決済み】ASP.NET IdentityのIUserSecurityStampStore<TUser>インターフェースとは何ですか?
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] WatiNかSeleniumか?[クローズド]