Java/JSP コード内の潜在的な SQL インジェクションの問題を見つける

StackOverflow https://stackoverflow.com/questions/116415

質問

私は、さまざまな Java および JSP ベースのアプリケーションで構成される巨大なレガシー コードベースを使用する顧客のために働いています。

ほとんどのクエリは、自作の「orm」システムを使用して行われます。一部のアプリケーションは、Plain Old JDBC を使用します。一部のアプリケーションは Hibernate に基づいています (はい、プラス記号を使用した HQL ビルドも潜在的な問題です)。古いアプリケーションの中には、完全に JSP で書かれているものもあります。

手動による SQL インジェクションのバグをいくつか見つけました。しかし、潜在的な弱点を探すために何らかのツールを使用することは実際に可能です。

何か案は?

役に立ちましたか?

解決

私がお勧めします バグを探す (Eclipse プラグインもあります) これらの問題やその他多くの問題を追跡できます。

私たちは仕事でそれを使用していますが、高速で、(無料として)お金を払う価値があります。その助けを借りて、いくつかの一般的な問題を解決しました。

他のヒント

PreparedStatement ではなく java.sql.Statement の使用を検索する検索を作成するか、IDE をロードします。

URL スペースはどのくらいの大きさですか?可能であれば、HTTP GET および POST リクエストを介して SQL インジェクションを試みることが最善です。ソース/バイト コードの検査によって発見できる問題がいくつかありますが、アプリケーションがどのような種類の潜在的に悪意のある入力を受け入れるかを確実に知る唯一の方法は、HTTP リクエストを使用することです。

CAL9000 は、URL のセットが小さい場合に適した SQL インジェクション / クロスサイト スクリプティング テスト ツールです。

誤って処理された悪意のある入力の検出に真剣に取り組んでいる企業は、サードパーティを雇って侵入テストを実施します。 ホワイトハットセキュリティ は私が過去に協力したことがあるベンダーであり、お勧めできます。私たちはこれらを 1 億ドル以上の電子商取引 Web サイトに使用しました。(私はホワイトハットとは何の関係もありません。あなたがホワイトハットの顧客になっても何の利益もありません。)

コードのすべてのテスト/強化は別として、次のような HTTP ファイアウォールを設置することは非常に良い考えです。 mod_security.

私が「これはローカライズを必要としない」アプリケーションのローカライズに取り組んでいたとき、コンパイルされたコード (.NET の IL、Java のバイトコードと同じです) を分析するために自家製ツールを使用しました。

SQLコマンドで文字列パラメータを持つDBで動作する指定されたメソッド(通常はCRUD操作)を呼び出し、文字列インスタンスを追跡して連結を確認することができます。

文字列の逆コンパイルと追跡には .NET Reflector を使用しました。しかし、Java 用の同様のツールが利用可能かどうかはわかりません:(。

治療ではなく予防を目指すこともできます。UI のすぐ下にサニタイズ レイヤーを追加すると、ユーザー入力に SQL/スクリプトが含まれることはなくなります。Javaには例があるはずです。CakePHPでそのようなアプローチを見たことがあります

を使用していない場所を探します。 PreparedStatement.

CAL9000をお勧めします。次のリンクから詳細を確認できます。

CAL9000

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top