2

我在 php 中编写了一个代码,可以让管理员登录。从表中获取密码信息。我知道编写这种代码不是一个好习惯,我应该使用准备好的语句或 mysqli_ 但我只想了解 sql 查询漏洞。我只想知道我的代码如何容易受到 SQL 注入的影响?如何绕过密码限制。我尝试在密码字段中输入密码 = 'anything' OR 'x'='x' 但它没有绕过它。这是我的代码:-

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 注入不起作用。?

4

2 回答 2

1

更改'anything' OR 'x'='x'anything' OR 'x'='x前导'和尾随'已经存在,实际上您正在尝试的查询看起来像

select * from adminlogin where password=''anything' OR 'x'='x''

这不是有效的 SQL

于 2013-05-03T16:41:39.560 回答
1

您选择测试注入的方式是错误的。

这段代码允许注入,但验证码检查的不是找到的行数,而是返回值。

但同样,说到 SQL 注入 - 这段代码很好,注入没问题。

于 2013-05-03T17:02:52.983 回答