我知道 PreparedStatements 可以避免/防止 SQL 注入(inject)。它是如何做到的?使用 PreparedStatements 构造的最终表单查询是字符串还是其他形式?
最佳答案
考虑做同一件事的两种方法:
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; --
那么在第一个例子中,你会被冲洗掉。第二次,您会很安全,Little Bobby Tables 会为您的学校注册。
关于java - PreparedStatement 如何避免或防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582161/