文字列が挿入される前に文字列を実行できる優れたライブラリを知っている人はいますか? jsp ページで実行します。
理想的には、ライブラリは次のようになります。
- 無料
- 軽量
- 使いやすい
喜んで返信してくれるSOコミュニティに事前に感謝します:)
文字列が挿入される前に文字列を実行できる優れたライブラリを知っている人はいますか? jsp ページで実行します。
理想的には、ライブラリは次のようになります。
喜んで返信してくれるSOコミュニティに事前に感謝します:)
Apache Commons lang StringEscapeUtils は、ある程度の方法を提供します。それは逃げますが、剥がしません。
http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html
編集:エスケープすると、ユーザーが入力したデータがコードとして実行されるのではなく、常にデータとしてユーザーに提示されることが保証されるため、インジェクション攻撃からあなたを救うことができます。
パラメータ化されたクエリを使用するには、データベース API のメカニズムに依存する必要があります。最初に SQL 文字列を動的に構築し、完成したクエリ文字列をサニタイズしたい場合、それは間違っています。それはただトラブルを求めているだけです。
編集:あなたの質問を読み直した後、あなたが求めていたものを誤解しているようです。あなたの質問のSQLインジェクションの部分については、私の最初のコメントが正確であることを支持します。そのためには、実際のクエリ パラメータが必要です。
JavaScript を除外することに関しては、それを行うための実際の標準的な方法はまだないと思います。Jeff がここで使用するコードを SO に投稿したことは知っていますが、手元にリンクがありません。見つけたら投稿します。
OWASPのAntiSamyを見てください。これはあなたが探しているものかもしれないと思います。私は現在Javaで働いていないので、それがどのように機能するかについてあなたに話すことはできません.
ここで他の人からの提案を言い換えるだけです:
OPは、SQLおよびJavaScriptインジェクション攻撃を防止したいと考えています。
SQLインジェクション攻撃は、パラメーター化されたクエリ/バインド変数を使用してデータベースにユーザー入力を提供することで防止できます。Javaの世界では、PMD(およびPMDルール)とFindbugs(ルールはデフォルトでFindbugsに組み込まれています)を使用すると、SQLインジェクション攻撃の影響を受けやすいコードベース内の場所を特定するのに役立ちます。OWASPには、JavaでのSQLインジェクションの防止に関する優れた記事があります。
スクリプトインジェクションに関する限り、攻撃者がインジェクションしたスクリプトが実行されないようにする最も安全な方法は、ユーザー入力が出力として使用されるときに、エンコードされた形式を使用して表示されるようにすることです。Webアプリの場合、これは次のようになります。 HTMLエンコーディング。このOWASPページは、JavaでHTMLエンコーディングを実行する方法を示しています。
c:out タグはデフォルトで XML をエスケープします。バインドされた値はユーザーの入力のままですが、ブラウザーによって生成されたソースはエスケープされたエントリを使用するため、これはユーザー入力を保存するのに便利です。
SQL インジェクションを防ぐには、PreparedStatement オブジェクトを利用します。永続層を使用している場合は、PreparedStatement オブジェクトを利用していることを確認してください。悪意のある HTML および JavaScript に関しては、. これにより、デフォルトで XML 文字がエスケープされます。fn tld にある JSTL 関数 escapeXml を使用することもできます。
あなたが言っているのは、文字列に追加される可能性のあるすべてのエントリについて、最初に「悪意のある」データを削除する必要があるということです。ええ、どれが入力として追加されたのか、何がクエリ自体の一部なのかがわからないので、それは理にかなっています。
わかりました、いくつかのコードの変更を再開する必要があると思います:)それでも、APIの質問はまだ残っています:)