首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的限制或条件会修复SQL注入漏洞吗?

SQL中的限制或条件会修复SQL注入漏洞吗?
EN

Stack Overflow用户
提问于 2018-12-04 09:17:25
回答 1查看 74关注 0票数 2

据报道,我们的网站容易受到SQL注入的影响,修复此漏洞的开发人员告诉我们,他们必须限制搜索标准中的OR条款。

以前,用户使用类似500个订单的搜索,现在这是有限的。正如他所说的,按照SQL注入实践,您必须限制SQL中的或条件。

例如,下面的日志显示了这些或条件,根据他的要求,这些条件是有限的。

还好吗?他的说法是对的?

编辑:数据库是Oracle11.2。

条件:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2018-12-07 17:02:06

在代码中看到SQL注入执行这种类型的函数是很常见的,因为代码将由连接在一起的值(通常没有验证)形成的in子句放在一起。

正如一些人在评论中所指出的,很可能您的开发人员修复了SQL注入,但是这样做的方式可能会导致性能问题和其他限制。开发人员正确地遵循了使用参数化查询(绑定变量)的一般指导,但在这种情况下盲目地遵循该指导并不能很好地工作。

解决这个问题的最佳方法(正如Damien_The_Unbeliever提到的)是将它绑定到Oracle端的一个数组类型 --这只需要一个绑定,并且将给您最好的性能。这需要在DB端添加一个对象,因此实现起来更加复杂。

另一个选项是继续使用in子句,但确保代码在连接这些值时验证它们--在订单ID的情况下,您很可能只需检查它是否为整数。这将不像第一个选项那样好,但将更优雅地处理更多的订单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53609395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档