3

SQLステートメントで文字列を使用する前に文字列をエスケープするJava標準ライブラリを探しています。これは主にエラーを防ぎ、SQLインジェクションを防ぐためです。残念ながら、他の多くのスレッドで提案されているように、プリペアドステートメントを使用することはできません。

使用できる標準ライブラリはありますか?Apache Commonsで見StringEscapeUtilsたことがありますが、これが最先端であるかどうかは本当にわかりません。

事前にどうもありがとうございました!

4

2 に答える 2

2

これは重要な問題であり、SQL インジェクションのセキュリティ上の問題のため、重大な問題です。?代わりに、エスケープする代わりにSQL 型の引数を使用することを検討します。たとえば、特定の文字列を検索するには:

代わりに:

SELECT * FROM accounts
    WHERE name = 'escapedstring1' AND password = 'escapedstring2'

私は使用します:

SELECT * FROM accounts WHERE name = ? AND password = ?

次に、注入された文字列を (エスケープは必要なく) 引数として SQL メソッドに渡す必要があります。JDBC を使用してそれを行う方法は次のとおりです。それがあなたに当てはまるかどうかはわかりません。

何かのようなもの:

String statement = "SELECT * FROM accounts WHERE name = ? AND password = ?";
try {
  PreparedStatement stmt = databaseConnection.prepareStatement(updateString);
  // notice that it is 1 based, not 0 (ick)
  stmt.setString(1, name);
  stmt.setString(2, password);
  ResultSet results = stmt.executeQuery();

私のORMライブラリであるORMLiteがselect引数を使用して例としてそれを行う方法を次に示します。

お役に立てれば。

于 2011-11-10T16:36:14.397 に答える
1

Apache Commons を使用できます。これは非常に成熟したプロジェクトです。

于 2011-11-10T16:36:16.370 に答える