java - PreparedStatement 如何避免或防止 SQL 注入(inject)?

标签 java sql jdbc prepared-statement sql-injection

我知道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();

如果“user”来自用户输入,并且用户输入是

Robert'); DROP TABLE students; --

那么在第一种情况下,你就会被浇灭。在第二种情况下,您会安全,并且 Little Bobby Tables 会在您的学校注册。

关于java - PreparedStatement 如何避免或防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509297/

相关文章:

java - 如何将 Java FloatBuffer(或任何 Buffer)保存到文件

java - 如何使用 Java 8 合并两个不同类型的自定义对象列表

java - SQL 不应该在 java 中运行

java - Oracle clob 上的 union\minus 时发生问题

java - 无法获得连接 : general error

java - 格式化骰子滚动输出 Java

java - Spring MVC 验证错误代码在哪里解决?

SQL完全清空数据库

java - 处理 java.lang.NullPointerException 错误

java - JDBC Oracle 查询。使用 setInt() 而不是 setObject() 执行时速度慢