据报道,我们的网站容易受到SQL注入的影响,修复此漏洞的开发人员告诉我们,他们必须限制搜索标准中的OR条款。
以前,用户使用类似500个订单的搜索,现在这是有限的。正如他所说的,按照SQL注入实践,您必须限制SQL中的或条件。
例如,下面的日志显示了这些或条件,根据他的要求,这些条件是有限的。
还好吗?他的说法是对的?
编辑:数据库是Oracle11.2。
条件:
and (UPPER(online_order_id) LIKE :param_online_order_id0
or UPPER(online_order_id) LIKE :param_online_order_id1
or UPPER(online_order_id) LIKE :param_online_order_id2
or UPPER(online_order_id) LIKE :param_online_order_id3
or UPPER(online_order_id) LIKE :param_online_order_id4
or UPPER(online_order_id) LIKE :param_online_order_id5
or UPPER(online_order_id) LIKE :param_online_order_id6
or UPPER(online_order_id) LIKE :param_online_order_id7
or UPPER(online_order_id) LIKE :param_online_order_id8
or UPPER(online_order_id) LIKE :param_online_order_id9
or UPPER(online_order_id) LIKE :param_online_order_id10
or UPPER(online_order_id) LIKE :param_online_order_id11
or UPPER(online_order_id) LIKE :param_online_order_id12
or UPPER(online_order_id) LIKE :param_online_order_id13
or UPPER(online_order_id) LIKE :param_online_order_id14
or UPPER(online_order_id) LIKE :param_online_order_id15
or UPPER(online_order_id) LIKE :param_online_order_id16
or UPPER(online_order_id) LIKE :param_online_order_id17
or UPPER(online_order_id) LIKE :param_online_order_id18
or UPPER(online_order_id) LIKE :param_online_order_id19
or UPPER(online_order_id) LIKE :param_online_order_id20
or UPPER(online_order_id) LIKE :param_online_order_id21
or UPPER(online_order_id) LIKE :param_online_order_id22
or UPPER(online_order_id) LIKE :param_online_order_id23
or UPPER(online_order_id) LIKE :param_online_order_id24
or UPPER(online_order_id) LIKE :param_online_order_id25
or UPPER(online_order_id) LIKE :param_online_order_id26
or UPPER(online_order_id) LIKE :param_online_order_id27
or UPPER(online_order_id) LIKE :param_online_order_id28
or UPPER(online_order_id) LIKE :param_online_order_id29
or UPPER(online_order_id) LIKE :param_online_order_id30
or UPPER(online_order_id) LIKE :param_online_order_id31
or UPPER(online_order_id) LIKE :param_online_order_id32
or UPPER(online_order_id) LIKE :param_online_order_id33
or UPPER(online_order_id) LIKE :param_online_order_id34
or UPPER(online_order_id) LIKE :param_online_order_id35
or UPPER(online_order_id) LIKE :param_online_order_id36
or UPPER(online_order_id) LIKE :param_online_order_id37
or UPPER(online_order_id) LIKE :param_online_order_id38
or UPPER(online_order_id) LIKE :param_online_order_id39
or UPPER(online_order_id) LIKE :param_online_order_id40
or UPPER(online_order_id) LIKE :param_online_order_id41
or UPPER(online_order_id) LIKE :param_online_order_id42
or UPPER(online_order_id) LIKE :param_online_order_id43
or UPPER(online_order_id) LIKE :param_online_order_id44
or UPPER(online_order_id) LIKE :param_online_order_id45
or UPPER(online_order_id) LIKE :param_online_order_id46
or UPPER(online_order_id) LIKE :param_online_order_id47
or UPPER(online_order_id) LIKE :param_online_order_id48
or UPPER(online_order_id) LIKE :param_online_order_id49
or UPPER(online_order_id) LIKE :param_online_order_id50
or UPPER(online_order_id) LIKE :param_online_order_id51
or UPPER(online_order_id) LIKE :param_online_order_id52
or UPPER(online_order_id) LIKE :param_online_order_id53
or UPPER(online_order_id) LIKE :param_online_order_id54
or UPPER(online_order_id) LIKE :param_online_order_id55
or UPPER(online_order_id) LIKE :param_online_order_id56
or UPPER(online_order_id) LIKE :param_online_order_id57
or UPPER(online_order_id) LIKE :param_online_order_id58
or UPPER(online_order_id) LIKE :param_online_order_id59
or UPPER(online_order_id) LIKE :param_online_order_id60
or UPPER(online_order_id) LIKE :param_online_order_id61
or UPPER(online_order_id) LIKE :param_online_order_id62
or UPPER(online_order_id) LIKE :param_online_order_id63
or UPPER(online_order_id) LIKE :param_online_order_id64
or UPPER(online_order_id) LIKE :param_online_order_id65
or UPPER(online_order_id) LIKE :param_online_order_id66
or UPPER(online_order_id) LIKE :param_online_order_id67
or UPPER(online_order_id) LIKE :param_online_order_id68
or UPPER(online_order_id) LIKE :param_online_order_id69
or UPPER(online_order_id) LIKE :param_online_order_id70
or UPPER(online_order_id) LIKE :param_online_order_id71)发布于 2018-12-07 17:02:06
在代码中看到SQL注入执行这种类型的函数是很常见的,因为代码将由连接在一起的值(通常没有验证)形成的in子句放在一起。
正如一些人在评论中所指出的,很可能您的开发人员修复了SQL注入,但是这样做的方式可能会导致性能问题和其他限制。开发人员正确地遵循了使用参数化查询(绑定变量)的一般指导,但在这种情况下盲目地遵循该指导并不能很好地工作。
解决这个问题的最佳方法(正如Damien_The_Unbeliever提到的)是将它绑定到Oracle端的一个数组类型 --这只需要一个绑定,并且将给您最好的性能。这需要在DB端添加一个对象,因此实现起来更加复杂。
另一个选项是继续使用in子句,但确保代码在连接这些值时验证它们--在订单ID的情况下,您很可能只需检查它是否为整数。这将不像第一个选项那样好,但将更优雅地处理更多的订单。
https://stackoverflow.com/questions/53609395
复制相似问题