SQL 注入

SQL 注入是指攻击者篡改程序中的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来欺骗数据库服务器执行非授权的任意查询语句,从而进一步得到相应的数据信息。

SQL 注入最常出现在 “会员登陆” 功能中。例如,某用户在网站中执行登陆操作时,程序将会执行如下 SQL 语句:
select * from 用户表 where username=’用户名’ and password=’密码’
当用户输入正确的用户名、密码时,该语句将会查询到相应记录,则表示会员登陆成功。

示例1

select * from user where username=’张三’ and password=’123456’;

运行效果1

SQL 注入 - 图1

但是一些别有用心的人,会在输入用户名、密码时,嵌入恶意的 SQL 语句,以此来实现非法登陆的操作。例如,输入的用户名为 “’or 1=1;#” ,密码为任意内容。

示例2

select * from user where username=’’ or 1=1;#’ and password=’’;

运行效果2

SQL 注入 - 图2
可见这样的结果不是我们想要的,有漏洞的代码是致命的。为了防止 SQL 注入的发生,最简单的办法就是使用预处理语句。