我已阅读并尝试将易受攻击的 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/