php - SQL注入认证绕过问题
问题描述
我会简短地说,直奔主题。
我正在测试我在下面制作的 PHP 代码上的 SQLI 登录绕过。
if(isset($_POST["login"]) && isset($_POST["password"])){
$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";
$result=mysqli_query($conn, $sql);
if(mysqli_num_rows($result) != 0)
echo "<h1>Login Success!</h1>";
else
echo "<h1>Invalid Login!</h1>";
}
我使用admin' --作为登录字段,以便在不输入密码的情况下成功绕过登录。
但问题是它不起作用,但是当我尝试使用这个管理员' -'-时它却起作用了。
所以问题是那个特定的备忘单如何以及为什么会起作用,而不是第一个?
这个管理员'--'--有效,但不是这个管理员'--
这些是我输入这 2 个备忘单时的服务器端代码。
不工作的旁路。
$sql="select * from users where login='admin' --' and password='{$_POST["password"]}'";
有效的旁路。
$sql="select * from users where login='admin' -- ' --' and password='{$_POST["password"]}'";
只需要对第一张备忘单不起作用的方式和原因进行一些澄清或解释,而第二张备忘单起作用。谢谢!
解决方案
您的代码中有一些真正的语法错误:
第一:不要做这样的事情:$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";
正确的方法是创建一个等于登录名和密码值的变量。例子:
$login=$_POST['login'];
$password=$_POST['password'];
在此之后,您的查询应如下所示:
$sql="select * from users where login='$login' and password='$password'";
推荐阅读
- python - caffe 神经网络的 Scipy 最小化给出与结果相同的初始条件
- firebase - 错误:读取规则文件 firestore.rules 时出错
- groovy - 如何使用 P4Java 从 groovy 中的 perforce 获取文件列表
- ios - 检测到 Internet 连接时如何在 iOS 应用程序上运行后台任务?
- mysql - 同时更新
- python - 我想将列标题向下移动成行,所有行都向下移动一个,这样做的精确和简短的方法是什么?
- rxjs - rxjs 可以用 switchmap 代替手动订阅处理
- jbehave - 我想通过命令行运行我的 Jbehave 测试
- javascript - Cheerio 指导:如何组合多个“td”类
- left-join - 如何在 Tableau 中获取唯一 ID 唯一一次的总和值