如何验证SQL查询中的输入参数以避免SQL注入?

时间:2014-12-23 08:13:00

标签: sql validation code-injection

public ResultSet queryResult(Connection con, String query) throws SQLException
{
    Statement s = con.createStatement();
    ResultSet results = s.executeQuery(query);
    return results;
}

此方法调用使用未经验证的输入构建的SQL查询。此调用可能允许攻击者 修改语句的含义或执行任意SQL命令。

如何验证SQL查询中的输入参数以避免SQL注入?

1 个答案:

答案 0 :(得分:1)

假设您使用Java,您应该使用Prepared Statements。准备好的Statement是预编译语句(与动态SQL语句相对)。您可以在语句中定义要插入参数的特定点(称为参数标记?,参见示例)。在您的代码中,您可以将值(绑定)分配给这些预定义的参数标记(例如,示例中的用户标识和密码)。使用这样的语句不能进行SQL注入。

PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?");
stmt.setString(1, userid);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();