下面是以下伪代码:
public updated(int id) {
// Note that variable **id** is not surrounded by single/double quotes.
sql = "Update table user set status=2 where user_id=**id** ";
// execute command
}这是否容易受到SQL注入(可能是算术SQL注入)的攻击?
发布于 2016-11-11 13:03:30
不,您的查询需要一个整数,并且保证得到一个整数。只有当攻击者能够提供可能更改查询的意外数据时,才会出现SQL注入漏洞。不同的整数不影响语法。但一旦您停止强制执行该类型,它就会变得不安全。
正如@CodesInChaos所指出的,如果您是这个片段的作者,您应该考虑使用参数化查询。这样,所提供的类型就变得不相关了,这更容易审计,也更难意外地打破。
发布于 2016-11-12 02:09:06
没有已知的通过整数执行SQL注入的技术。但是请注意,在某些情况下,通过横向SQL注入,非整数容易受到SQL注入的影响。不清楚整数是否会永远保持安全。
正如其他答案所提到的-使用参数化查询,甚至对数字和日期。
https://security.stackexchange.com/questions/142373
复制相似问题