Blind Sql注入尽管使用了预处理语句

时间:2015-07-13 18:07:18

标签: java security

我们最近为我们的应用程序完成了安全扫描,我们发现很少有盲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();

}

有人能让我知道这段代码有什么问题以及如何解决这个问题? 数据验证只是方法吗?如果我想允许所有字符怎么办?

2 个答案:

答案 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";

希望这会有所帮助