SQLインジェクションからパラメータ化されたSQLクエリを保護したい。私は、PreparedStatementを使ってSQLインジェクションを回避する方法について説明した記事を読んだ。 link特殊文字からのSQLインジェクションを防ぐ方法
記事によると、preparedstamentはキャッシュからプリコンパイルされたクエリを選択するのに役立ち、レースホルダは最終ステップでユーザーデータに置き換えられ、クエリは再びコンパイルされません。したがって、クエリが1回だけコンパイルされるため、ユーザー入力としてSQLクエリを提供する場合は、SQLインジェクションを避けることができます。
しかし、誰かが 'x' = 'x'などの特殊文字を含む文字列を与えるとどうなりますか?たとえば、「SELECT * FROM users WHERE username = 'blah' AND password = 'foo' OR 'x' = 'x'」のように、プレースホルダが 'x' = 'x'のようなユーザデータで置き換えられると、 Java PreparedStatementは、これらの特殊文字を処理しますか?
誰もが、私はこの
プリペアドステートメントはこれを処理する必要はありません。なぜなら、クエリとデータは別々にサーバーに送信されるからです。 – CBroe
ORはどのように追加する必要がありますか? – baao
これを読んでくださいhttps://stackoverflow.com/questions/1582161/how-does-a-preparedstatement-avoid-or-prevent-sql-injection –