【技术答题 - 8】sql 注入使用预编译之后,是否可以完全修复?

请先 登录 后评论

2 个回答

空城 - 安全小菜鸡

不可以,在order by,like等地方不可用预编译来防御

请先 登录 后评论
大zoumou

预编译主要是用了参数化的方法防御SQL注入,但有些地方是不允许进行参数化的,例如order by后面就不能进行参数化,order by,order by后一般是接字段名,而字段名是不能带引号的,比如 order by username;如果带上引号成了order by 'username',那username就是一个字符串不是字段名了,这就产生了语法错误。

利用的方法有:

  1. 直接添加注入语句,?sort=(select ******)
  2. 利用一些函数。例如 rand(),if()函数等。?sort=rand(sql 语句) Ps: rand(ture)和 rand(false)的结果是不一样
  3. 利用 and,例如?sort=1 and(加 sql 语句),sql 语句可以利用报错注入和延时注入的方式,语句我们可以很灵活的构造。
  4. 堆叠注入
请先 登录 后评论

相似问题