SQL 注入的原理
SQL 注入也叫作 SQL Injection,它指的是将非法的 SQL 命令插入到 URL 或者 Web 表单中进行请求,而这些请求被服务器认为是正常的 SQL 语句从而进行执行。也就是说,如果我们想要进行 SQL 注入,可以将想要执行的 SQL 代码隐藏在输入的信息中,而机器无法识别出来这些内容是用户信息,还是 SQL 代码,在后台处理过程中,这些输入的 SQL 语句会显现出来并执行,从而导致数据泄露,甚至被更改或删除。
可能产生 SQL 注入:
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
如果我们在 URL 中的?id= 后面输入 ' or 1=1 --+
,那么 SQL 语句就变成了下面这样:
SELECT * FROM users WHERE id='' or 1=1 -- LIMIT 0,1
其中我们输入的(+)在浏览器 URL 中相当于空格,而输入的(–)在 SQL 中表示注释语句,它会将后面的 SQL 内容都注释掉,这样整个 SQL 就相当于是从 users 表中获取全部的数据。然后我们使用 mysql_fetch_array 从结果中获取一条记录,这时即使 ID 输入不正确也没有关系,同样可以获取数据表中的第一行记录。
**