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();

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

Robert'); DROP TABLE students; --

那么在第一个例子中,你会被冲洗掉。第二次,您会很安全,Little Bobby Tables 会为您的学校注册。

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

相关文章:

mysql - 如何创建合并重复主键的 SELECT

java - 以下 JDBC/MySQL 查询有什么问题

java - 使用字符串变量将自定义日期和当前时间插入 Oracle 数据库

java - 添加新的数据源(mysql)wildfly

java - 用于从字符串获取电话号码掩码的正则表达式

java - 100.000 个 vector 的高效比较

sql - 在 Postgresql 中实现类似 FOR 循环的功能

mysql - 如何根据字段的值选择不同的列

java - 有没有办法在java 8中分割字符串并操作它?

java - 如何实用地删除 android 中的 chrome 缓存