12

サーブレット フィルターによって呼び出され、インジェクション攻撃の試みと Struts に基づく Java Web アプリケーションの XSS をチェックする Java クラスを作成しています。InjectionAttackChecker クラスは、正規表現と java.util.regex.Pattern クラスを使用して、正規表現で指定されたパターンに対して入力を検証します。

そうは言っても、次の質問があります。

  1. インジェクション攻撃を防ぐために、すべての特殊文字と文字パターン (<>、.、-、<=、==、>= など) をブロックする必要があります。
  2. そのまま使用できる既存の正規表現パターンはありますか?
  3. いくつかの特定のケースでは、いくつかの特殊文字パターンを許可する必要があります。いくつかの例の値 (許可される) は (異なる値の区切り文字として「パイプ」| 文字を使用) *Atlanta | です。#654,8号館 #501 | 単純ヘルペス: 慢性潰瘍 (> 1 ヶ月持続) または気管支炎、肺炎、または食道炎 | FUNC & COMP(date_cmp), "NDI & MALKP & HARS_IN(icd10, yes)" . インジェクション攻撃と XSS を防止しながら、これらの文字パターンを許可するには、どのような戦略を採用する必要がありますか?

質問を明確に述べたことを願っています。しかし、そうしなかった場合は、2番目の質問であることをお詫びします。説明が必要な場合はお知らせください。

4

6 に答える 6

7

あなたの質問に基づいて、悪い値をフィルタリングしようとしていると思います。個人的には、この方法はすぐに非常に複雑になる可能性があると感じており、別の方法として値をエンコードすることをお勧めします。これは、両方の方法の長所と短所を説明している主題に関する IBM の記事です ( http://www.ibm.com/developerworks/tivoli/library/s-csscript/ ) 。

SQL インジェクション攻撃を回避するには、SQL 文字列を作成する代わりに、準備されたステートメントを使用してください。

于 2009-01-27T20:19:02.500 に答える
3

入力時にすべてのデータをサニタイズしようとすると、非常に困難な時間を過ごすことになります。文字エンコーディングなど、フィルターを回避できるトリックがたくさんあります。この印象的なリストSQL インジェクションとして実行できる無数のことの一部にすぎません。また、HTML インジェクション、JS インジェクション、および潜在的に他のものを防ぐ必要があります。これを行う唯一の確実な方法は、アプリケーションで使用されるデータをエンコードすることです。Web サイトに書き込むすべての出力をエンコードし、すべての SQL パラメーターをエンコードします。そのリンクで説明されているように、通常のエンコーディングは文字列以外のSQLパラメーターでは機能しないため、後者には特に注意してください。パラメーター化されたクエリを使用して、完全に安全にします。また、理論的には、ユーザーがデータを入力した時点でデータをエンコードし、エンコードしてデータベースに保存することもできますが、それは常にそのタイプのエンコーディングを使用する方法でデータを使用する場合にのみ機能することに注意してください (つまり、HTML HTML でのみ使用される場合はエンコーディング; SQL で使用される場合は、' 保護されません)。これが、コード化されたデータをデータベースに保存せず、使用時に常にコード化するという経験則がある理由の一部です。

于 2009-01-27T20:42:58.567 に答える
2

すべてのデータを検証してバインドすることは必須です。10% の人がブラウザーで JavaScript をオフにしているため、クライアント側とサーバー側の両方の検証を実行します。

Jeff Atwood は、このトピックについてのすばらしいブログを書いており、その複雑さを理解することができます。

于 2009-01-27T20:24:36.717 に答える
1

値をフィルタリングまたはブロックしないでください。

  1. テキストのビットを組み合わせるときは、適切な型変換を行うようにする必要があります:) つまり、HTML型の文字列とTEXT型の文字列の断片がある場合、それらを盲目的に連結するのではなく、TEXTをHTMLに変換する必要があります。haskellでは、型システムを使用してこれを簡単に強制できます。

優れた HTML テンプレート言語はデフォルトでエスケープします。XML/HTML を生成している場合、テンプレート言語よりも DOM ツールを使用した方がよい場合があります。DOM ツールを使用すると、これらの問題の多くが解消されます。残念ながら、DOM ツールは通常、テンプレート化に比べてくだらないものです :)

  1. ユーザーから HTML タイプの文字列を取得する場合は、ライブラリでサニタイズして、不適切なタグ/属性をすべて削除する必要があります。優れたホワイトリスト HTML フィルターがたくさんあります。
  2. 常にパラメーター化されたクエリを使用する必要があります。いつも!クエリを動的に構築する必要がある場合は、パラメーターを使用して動的に構築します。非 SQL 型付き文字列を SQL 型付き文字列と組み合わせないでください。
于 2009-03-11T17:47:56.570 に答える
1

これは、まさにその主題に関するかなり広範な記事です。

私はあなたがここに聖杯を持っているとは思わない. また、受信したテキストをいくつかの標準的な方法 (uuencode、base64) でエンコード/デコードすることをお勧めします。

于 2009-01-27T20:24:17.903 に答える
0

AntiSamyプロジェクト[www.owasp.org]をご覧ください。私はそれがまさにあなたが望むものだと思います。特定のタグをブロックするようにフィルターを設定できます。また、ポリシーテンプレートも提供します。スラッシュドットポリシーから始めると、必要なタグを追加できます。

また、www.osasp.org Webサイトには、アプリケーションの保護に関する豊富な知識があります。

プリペアドステートメントとエンコーディングの使用についてユーザー「nemo」が言うことも実行する必要があります。

于 2009-03-11T17:31:33.850 に答える