java - PreparedStatement 是否避免 SQL 注入(inject)?

标签 java jdbc prepared-statement sql-injection

我已阅读并尝试将易受攻击的 sql 查询注入(inject)我的应用程序。它不够安全。我只是将语句连接用于数据库验证和其他插入操作。

preparedStatements 安全吗?而且这个说法也会有问题吗?

最佳答案

使用字符串连接从任意输入构造查询不会使 PreparedStatement 安全。看看这个例子:

preparedStatement = "SELECT * FROM users WHERE name = '" + userName + "';";

如果有人放

' or '1'='1

作为 userName,您的 PreparedStatement 将容易受到 SQL 注入(inject)的攻击,因为该查询将在数据库上执行

SELECT * FROM users WHERE name = '' OR '1'='1';

所以,如果你使用

preparedStatement = "SELECT * FROM users WHERE name = ?";
preparedStatement.setString(1, userName);

你会安全的。

部分代码取自 this Wikipedia article .

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

相关文章:

java - 使用 xuggler 从文件中读取视频时抛出 "EXCEPTION_ACCESS_VIOLATION"

postgresql - 在存储函数中使用预处理语句

java - Netty 写入所有连接的 channel

Java 对 Guava TreeBasedTable 进行排序

java - 插入在另一个表中有列的表

java - 尝试在 jdbc ignite 瘦客户端中提供多个 IP

java - JayDeBeApi 连接崩溃

Java:从字符串创建日期对象并插入MySQL

php - pdo - 准备好的语句丢失数据?

java - ORA-00904 : : invalid identifier Issue with Hibernate Dependent objects program