Web安全漏洞——sql注入

1.原理

注入攻击的本质,是把用户输入的数据当成代码执行。两个关键条件:一是用户能够控制输入;二是原本程序要执行的代码,拼接了用户输入的数据。当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄露。

2.分类

  1. 按注入点的参数类型:数字型、字符型
    当注入点的参数为整数时,如id、num、page等,这种形式为数字型注入漏洞
    当注入点的参数为字符串时,则为字符型注入,字符型注入需要用引号来闭合
  2. 按数据库返回结果:回显注入、报错注入、盲注
    回显注入:可以直接在存在注入点的页面返回结果
    报错注入:如果Web服务器开启了错误回显,如果查询语句有语法错误,服务器会返回错误信息且直接显示在页面中,然没有返回数据库的查询结果,但是可以构造一些报错语句从错误信息中获取想要的结果。
    盲注:很多时候,Web服务器关闭了错误回显,盲注就是在服务器没有错误回显时完成的注入攻击,由于“调试信息”,攻击者必须找到一个方式来验证注入的sql语句是否得到执行。有based boolen和based time两种盲注…详解
  3. 按照注入位置及方式:post注入,get注入,cookie注入等
    漏洞利用例子(dvwa):
    https://www.freebuf.com/articles/web/120747.html

3.防御

  1. 一般来说,防御sql注入的最佳方式就是使用预编译语句,绑定变量
  2. 使用安全的存储过程,即先将sql语句定义在数据库中,但是存储过程也可能存在注入问题,因此应该尽量避免在存储过程内使用动态的sql语句,如果无法避免,则应该使用严格的输入过滤或者是编码函数来处理用户的输入数据。
  3. 检查输入的数据类型
  4. 使用安全函数

猜你喜欢

转载自blog.csdn.net/weixin_42095265/article/details/84197214