4

データベースに接続する Java デスクトップ アプリケーションを開発していますが、次のことを知りたいです。私の知る限り、Prepared Statements はユーザー データと直接連結しない限り SQL インジェクションを回避しますが、今日、文字列の正規表現 (LIKE 演算子の '%' など) をエスケープしないことがわかりました。 ) 文字列自体を分割してクエリを変更する可能性のある文字をエスケープするだけであるためです。したがって、ユーザーが行う場合:

Search = "%Dogs"; // User input
Query = "SELECT * FROM Table WHERE Field LIKE ?";
blah.setString(1, Search);

インジェクションにより、先頭に「Dogs」を含むすべての行が返されます。

今私は尋ねます:

1-) これは、グローバルな視点から見ると何か悪い/危険なことですか?

2-) Mysql が文字列内から使用できる正規表現の完全なリストはありますか? もしそうなら、それを私と共有してもらえますか?

ありがとうございました。

4

1 に答える 1

2

ユーザーが検索でそのようなメタ文字を使用すると、結果が壊滅的なものになる場合もあれば、そうでない場合もありますが、 の検索はうまくいかない可能性があります%%。有効な検索で%Dogsも、ユーザーが期待していた結果が返されない場合があり、ユーザー エクスペリエンスに影響します。

LIKEは 2 つのメタ文字しか提供しないため、ユーザーから取得したときに両方を自分でエスケープできます (単純に に似たものを使用しますSearch = Search.replaceAll("%", "\\\\%"))。

于 2013-05-29T22:55:08.633 に答える