我们最近为我们的应用程序完成了安全扫描,我们发现很少有盲sql注入问题。但是我发现即使在使用准备好的声明之后我们也会遇到这个问题。
单独使用预处理语句不能解决绑定sql注入问题? 在准备好的语句中使用字符串连接会破坏所有优势吗?
private static final String selectStaement=" select email,phone from tuser where name=? ";
public void execute(String name) throws SQLException {
PreparedStatement preparedStatement = theConnection.prepareStatement(selectStaement + " ORDER by name");
preparedStatement.setString(1, name);
rs = preparedStatement.executeQuery();
}
有人能让我知道这段代码有什么问题以及如何解决这个问题? 数据验证只是方法吗?如果我想允许所有字符怎么办?
答案 0 :(得分:1)
从安全角度来看,您的代码很好,这是扫描仪报告的虚假警报(无论哪一个)。
您应该将扫描仪配置为忽略这些类型的警告。
答案 1 :(得分:-3)
“如果您不使用用户输入作为预准备语句的参数,而是通过将字符串连接在一起来构建SQL命令,那么即使使用预准备语句,您仍然容易受到SQL注入的攻击。”
请参阅:How does a PreparedStatement avoid or prevent SQL injection?
为什么不使用:
private static final String selectStaement=" select email,phone from tuser where name=? ORDER by name";
希望这会有所帮助