一、什么是 SQL 注入
SQL 注入是指应用程序对用户输入数据的合法性没有判断、没有过滤,攻击者可以在应用程序中通过表单提交特殊的字符串,该特殊字符串会改变 SQL 的运行结果,从而在管理员毫不知情的情况下实现非法操作,以此来实现欺骗数据库执行非授权的任意查询。
SQL 注入的特点如下:
- 广泛性:任何一个基于 SQL 语言的数据库都可能收到 SQL 注入攻击。之所以广泛性是因为很多程序员不对表单提交的参数进行校验,也不进行参数化传参。
- 隐蔽性:SQL 注入语句大部分都嵌套在普通的 HTTP 请求中,很难与正常语句区分开, SQL 注入的变种也很多。
- 操作简单:网上 SQL 注入相关的工具很多,几乎任何一个人都可以进行 SQL 注入操作。
- 危害大:攻击者通过 SQL 注入能够获得更多的数据,例如管理员密码、个人隐私数据等等。
二、如何进行 SQL 注入
例如,有 user 表,字段包含 username 和 password 列。我们要通过查询传入的数据来判断使用可以登录:
select * from user where username='admin' and password='00000';
如果攻击者将页面上的 password 输入框的内容输入为如下文本:
' or '1'=1'
那么组成的 SQL 语句将变为:
select * from user where username='admin' and password='' or '1'='1';
这样就形成了一个不管是否存在username 都能正常登录的 SQL 语句。