PreparedStatement はどのようにして SQL インジェクションを回避または防止するのでしょうか? 質問する

PreparedStatement はどのようにして SQL インジェクションを回避または防止するのでしょうか? 質問する

PreparedStatements が SQL インジェクションを回避/防止することは知っています。どのようにそれを実現するのでしょうか? PreparedStatements を使用して構築される最終的なフォーム クエリは文字列になりますか、それとも他の形式になりますか?

ベストアンサー1

同じことを行う 2 つの方法を考えてみましょう。

PreparedStatement stmt = conn.createStatement("INSERT INTO students VALUES('" + user + "')");
stmt.execute();

または

PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES(?)");
stmt.setString(1, user);
stmt.execute();

「ユーザー」がユーザー入力から来ていて、ユーザー入力が

Robert'); DROP TABLE students; --

すると、最初の段階では、あなたは困ったことになります。2 番目の段階では、あなたは安全で、Little Bobby Tables があなたの学校に登録されます。

おすすめ記事