4

ベストプラクティスは何ですか? ASP.NETSQL データベースに格納するテキスト データをユーザーが入力できるサイトを作成しています。HttpUtility.HTNLEncode()データの保存とHTMLDecode表示に使用しています。

これはうまく機能しますが、検索 (選択またはフリー テキスト) がはるかに難しくなります。ユーザーは、<、"、' およびその他の問題のある文字を含むテキストを入力できる必要があります。

ベストプラクティスは何ですか? エンコードされていないデータを保存するには? 注射のリスクを軽減するにはどうすればよいですか?

4

4 に答える 4

4

ユーザー入力を常にエンコードせずにデータベースに保存し、データベースからのユーザー入力を常にエンコードしてから出力します。

また、永続化する前に、ユーザー入力をフィルタリング/検証する必要があります。

  • 入力: ユーザー入力 -> 検証/フィルター -> データベースに永続化
  • 出力: データベースからのコンテンツ -> エンコード -> クライアントへの出力

これは、ユーザー データを使用および再利用する唯一の適切な方法です。

http://msdn.microsoft.com/en-us/library/t4ahd590%28v=vs.80%29.aspx#cpconbestsecuritypracticesforwebapplicationsanchor4 と、永続化する前に HTML をエンコードする必要がありますか?も参照してください。

于 2012-09-05T11:57:06.377 に答える
2

ここでカバーする領域がいくつかあるので、ポイントをカバーするために最善を尽くします。ポイントは次のとおりです。

  • 安全でない可能性のあるテキストの送信
  • 安全でないテキストの保存
  • 安全でないテキストの表示

ASP.NET には、攻撃に対する最前線の防御となる検証メカニズム (@Candie が指摘) があります。HTML、XML、JS などを送信する必要があるアプリがある場合は、検証をオーバーライドして許可する必要があります。

データが通過したら、安全に保管できると思います。このデータを格納する最善の方法は、SQL インジェクション攻撃につながる可能性があるため、動的 T-SQL ではなく、ストアド プロシージャを使用することです。

残っている唯一の問題は、そのデータをそのまま HTML で表示することです。文字通りコンテンツを画面にダンプすると、ここから問題が明らかになり始める可能性があります。ここであなたのHTMLEncode出番です。危険にならないように、文字は HTML と同等のコードに変換されます。Literal コントロールは.Modeプロパティを提供するため、コントロールはこれを処理できます。

最後に、MSDN にはHow to: Protect against Script Exploits in a Web Application by Applying HTML Encoding to Stringsに関する記事があり、これも役立つ場合があります。

于 2012-09-05T12:16:03.530 に答える
0

自問する必要があるのは、なぜデータをエンコードするのかということです。

SQL インジェクションを回避しようとしている場合は、データをデータベースに入れる前に検証する必要があります。たとえば、入力に英数字のみが必要な場合は、データベースに挿入する前にそれを確認します。

HTML を入力していて、テキストを確認するのが難しい場合は、ストアド プロシージャを使用することをお勧めします。

MsSQL を使用している場合は、これが役立つ場合があります。.

MySQL を使用している場合、これはそれらを参照している可能性があると思い ます。

常に入力をサニタイズすることを忘れないでください。

于 2012-09-05T12:29:50.607 に答える
0

ページの aspx で ValidateRequestMode を調整します

ValidateRequestMode="ValidateRequestMode.Disabled"

リンク: http://msdn.microsoft.com/en-us/library/system.web.ui.page.validaterequestmode.aspx

于 2012-09-05T11:58:48.777 に答える