SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
比如这里原本是通过输入用户id来查询用户的first name, surname
<?php
if(isset($_GET['Submit'])){
// Retrieve data
$id = $_GET['id'];
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i = 0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
?>
但是由于对用户输入数据的合法性没有判断或过滤不严,导致可以在输入id时,添加额外的语句去获取数据库的其他大量信息。
比如输入1' or 1=1 --
来获取所有用户的first name, surname
原来的SQL语句是SELECT first_name, last_name FROM users WHERE user_id = '$id'
,先通过1’ 与前半个‘合并,之后再由or 1=1
使得整个语句一直为真,再有-- '
注释掉后面的语句,这样最终提交的语句变成
SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1 --
将所有的first_name, last_name都获取下来。