我已经在php中编写了一个代码,可以让管理员登录。密码信息从表格中提取。我知道编写这样的代码并不是一个好习惯,我应该使用准备好的语句或mysqli_,但我只想了解sql查询漏洞。我只想知道我的代码如何容易受到SQL注入的影响?我如何绕过密码限制。我尝试在密码字段中输入password ='anything'或'x'='x',但它并未绕过它。这是我的代码: -SQL注入的测试查询
if(isset($_POST["Submit"]))
{
include 'db_connect.php';
$user=$_POST['user'];
$pass=$_POST['pass'];
$checkquery="select * from adminlogin where password='$pass' ";
$queryex= mysql_query($checkquery);
$row= mysql_fetch_array($queryex);
$checkcasepass = $row['password'];
if($user=='admin' && strcmp($checkcasepass,$pass)==0)
{
setcookie("admin",$user);
setcookie ("student", "", time() - 3600);
header("location: admin option.php");
}
else
{
echo "Sorry User Name and Password is Wrong";
}
}
我改变了我的查询字符串,以此为测试目的: -
$checkquery="select * from adminlogin where password='$pass' OR 1=1 ";
,但没有奏效。这是否可以归功于魔术引号?但我正在使用PHP 5.4.3,并且魔术报价已折旧。我想知道为什么SQL注入不起作用。 ?
如果你可以帮忙,你应该使用'PDO','mysql_ *'函数被官方弃用。学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。看看[这个比较](http://j.mp/QEx8IB),如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – 2013-05-03 16:33:34
@dirt虽然你非常正确地说明这一点,但用户明确表示他们理解并希望了解注入是如何工作的 – RMcLeod 2013-05-03 16:43:35
为什么不只是**回显**生成的查询并将其发布到此处? – 2013-05-03 16:48:09