0

ユーザーが html または javascript (または SQL) をフォームに入力した場合、すべてが消去され、プレーンテキストのみが表示される (または HTML がプレーンテキストで表示される) か、またはユーザーエラー?明らかに、私は XSS やあらゆる種類のインジェクションを防止しようとしているだけでなく、ユーザーが独自の HTML でページの表示を妨害しようとしたりしたくありません。理想的には、HTML をデータベースに書き込まないようにしたいと思います。

編集:皆さんがこの問題をさまざまな角度から解決したため、誰を答えとしてマークするかわかりません

4

3 に答える 3

1

データベースに保存する前にフィルタリングするのはなぜですか?出力時にフィルタリングします。たとえば、Webアプリケーションでは、HTMLエンコードできます。Razor@関数はすでにそれを行っています:

@Model.SomePropertyThatCouldContainHTML

今、あなたは安全です。また、データベース内には、他のアプリケーションで再利用できる実際の文字列が格納されています。たとえば、デスクトップアプリケーションでは、XSSについて心配する必要がないため、これらのタグを削除しても意味がありません。

ただし、エンコードされていないユーザー入力を表示する必要がある場合は、AntiXSSライブラリを使用して、XSSになる可能性のあるすべての危険なJavaScriptコードを削除できます。

また、SQLに関する限り、常にパラメーター化されたクエリを使用してください。これにより、SQLインジェクションについて心配する必要がなくなります。

于 2012-08-14T18:43:06.520 に答える
0

デフォルトでは、Web サイトで Request Validation がオンになっています。基本的に、これはサーバーに到達するたびに各リクエストを調べ、潜在的に危険なリクエストを検出すると例外をスローします。理論的にはそれは素晴らしいことですが、現実には、少なくとも私の経験では、HTML が存在するだけで検証が失敗します。

XSS を防ぐ方法はたくさんありますが、基本的な方法をいくつか紹介します。

  • 入力を制限します。これが意味することは、数字のみを含むべきフィールド (電話番号など) がある場合、ユーザーがそのフィールドに数字以外を入力できないようにすることです。
  • 入力をデコード/エンコードする
  • XSS リクエストは、リクエストに物理タグが存在しないようにエンコードできるため、削除する正規表現を見つけるだけでは特効薬ではありません。

以下にいくつかのリソースを示します。

最後に、疑問がある場合はGoogle

于 2012-08-14T18:47:02.147 に答える