【问题标题】:How to fix SQL injection with preparedstatment?如何使用准备好的语句修复 SQL 注入?
【发布时间】:2019-04-04 18:56:27
【问题描述】:

我有一个类被用于 SQL 注入的 veracode 扫描标记,即使我使用的是 PreparedStatment。我无法确定问题出在哪里,或者这是否可能是扫描中的误报。请参考以下代码(QueryBuffer是一个使用StringBuffer的自定义类):

List<ReferralService> list = new ArrayList<ReferralService>();
QueryBuffer sql = new QueryBuffer();
sql.addSql("SELECT rs.id FROM referral_service rs ");
sql.addSql("WHERE ");
sql.addSql("rs.closed = ? AND ");
sql.addSql("rs.workflow_id = ? ");
sql.addSql("ORDER BY submitted_on ASC limit 200");

PreparedStatement prepStmt = conn.prepareStatement(sql.toString());
prepStmt.setInt(1, 0);
prepStmt.setInt(2, liTeamID);
ResultSet rs = prepStmt.executeQuery();

【问题讨论】:

  • 看起来像是误报。您可能可以通过不使用该 QueryBuffer 来摆脱它,而是直接从单个字符串文字中准备语句。
  • 你为什么还要使用QueryBuffer?在显示的代码中,它只是增加了不必要的开销。

标签: java prepared-statement


【解决方案1】:

看起来 veracode 对字符串连接不满意。

这更像是一种 SQL 注入,将来(另一个)开发人员将扩展代码并向字符串添加坏东西(如变量)时可能会发生。

所以请避免使用所有这些 addSql 字符串。

【讨论】:

    猜你喜欢
    • 2014-04-25
    • 2014-10-14
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2015-11-08
    • 2011-12-06
    相关资源
    最近更新 更多