首页 > 解决方案 > 修复基于 URL 内容的 SQL 注入

问题描述

我试图为我的应用程序修复 SQL 注入。我用来获取详细信息的 SQL 查询是

"SELECT accountNumber, balance FROM accounts WHERE reg_id = " 
  + request.getParameter("reg_id");

我知道这个查询很容易受到攻击,这就是为什么我试图使用绑定参数来解决这个问题,但问题是 reg_id 是字母数字数据以及“-”(连字符作为特殊符号,例如 - 1abh34-dfg465-aw234)我不能使用statement.setInt()statement.setString()方法来验证 reg_id。

我的问题是,有什么方法可以用来验证字母数字数据吗?

我的java代码是

String accountBalanceQuery = 
  "SELECT accountNumber, balance FROM accounts WHERE reg_id = " 
  + request.getParameter("reg_id");

try {
    Statement statement = connection.createStatement();
    ResultSet rs = statement.executeQuery(accountBalanceQuery);
    while (rs.next()) {
        page.addTableRow(rs.getInt("accountNumber"), rs.getFloat("balance"));
    }
} catch (SQLException e) { ... }

或者有没有其他方法可以在没有绑定参数的情况下修复这个漏洞。对此的任何线索将不胜感激。

标签: sqljdbcsql-injection

解决方案


推荐阅读