SQLステートメントで文字列を使用する前に文字列をエスケープするJava標準ライブラリを探しています。これは主にエラーを防ぎ、SQLインジェクションを防ぐためです。残念ながら、他の多くのスレッドで提案されているように、プリペアドステートメントを使用することはできません。
使用できる標準ライブラリはありますか?Apache Commonsで見StringEscapeUtils
たことがありますが、これが最先端であるかどうかは本当にわかりません。
事前にどうもありがとうございました!
SQLステートメントで文字列を使用する前に文字列をエスケープするJava標準ライブラリを探しています。これは主にエラーを防ぎ、SQLインジェクションを防ぐためです。残念ながら、他の多くのスレッドで提案されているように、プリペアドステートメントを使用することはできません。
使用できる標準ライブラリはありますか?Apache Commonsで見StringEscapeUtils
たことがありますが、これが最先端であるかどうかは本当にわかりません。
事前にどうもありがとうございました!
これは重要な問題であり、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引数を使用して例としてそれを行う方法を次に示します。
お役に立てれば。
Apache Commons を使用できます。これは非常に成熟したプロジェクトです。