问题描述
使用字符串连接从任意输入构造查询将PreparedStatement
不安全。看一下这个例子:
preparedStatement = "SELECT * FROM users WHERE name = '" + userName + "';";
如果有人放
' or '1'='1
as userName
,您PreparedStatement
将很容易受到sql注入的攻击,因为该查询将以
SELECT * FROM users WHERE name = '' OR '1'='1';
所以,如果您使用
preparedStatement = "SELECT * FROM users WHERE name = ?";
preparedStatement.setString(1, userName);
你会很安全的。
某些代码摘自该Wikipedia文章。
解决方法
我已阅读并尝试将易受攻击的sql查询注入到我的应用程序中。它不够安全。我只是使用Statement Connection进行数据库验证和其他插入操作。
prepareStatement安全吗?而且此语句也会有问题吗?