如何防止Oracle“Order by”部件中的sql注入?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

为了得到一些数据,我创建了一个sql查询:) 当然,有一些过滤和订购部分。

为了得到结果,我使用了“NamedParameterJdbcTemplate”,当我需要向“where”部分添加内容时,我使用参数映射来防止注入。

但它与“order by”部分不同,因为没有自动转义(它是sql的一部分)。该订单部分有时会填充来自用户的数据(直接),有时会从内部代码中添加一些额外的排序参数。有一个问题:有时这个排序字段不仅包含列名,而且包含一个sql语句

现在,通过将某些字符(如')替换为空字符串来手动转义用于排序的每个参数,但是为我们的代码设置的一些参数有点复杂,无法通过此规则。

在使用jdbc模板时,在查询的排序部分防止sql注入的最佳方法是什么?

提问于
用户回答回答于
用户回答回答于

你可以限制排序顺序的选择。大多数应用程序只允许用户按显示列进行排序,用户可以选择要在列位置排序的列。

在这种情况下,你只会接受来自用户的整数(您可以接受负数以降序排序)。你可以通过接受整数列表让用户按几列排序。

整数很容易检查,这不会将底层列名暴露给用户。

扫码关注云+社区