【发布时间】:2018-10-29 11:27:01
【问题描述】:
我有一个登录表单,但我很困惑为什么我的 SQL 注入参数在这里不起作用。我没有任何防止 SQL 注入的功能或方法。
我为测试 SQL 注入制作了这个登录表单,它是用 PHP 编写的。 这是我的代码。
<?php
include("myconnection.php");
$error="";
if(isset($_POST["submit"]))
{
if($_POST["username"] == '' || $_POST["password"]== '')
{
$error='Please fill the blanks!';
}else
{
$username=$_POST['username'];
$password=$_POST['password'];
$sql="SELECT * FROM users WHERE username='$username' AND password='$password'";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
if(mysqli_num_rows($result)==1)
{
$login_user=$_POST["$username"];
header("location: myhome.php");
$error="Connected";
}
else
{
//$error="Incorrect Username/Password";
$message="Incorrect Credentials";
echo "<script='text/javascript'>$message</script>";
}
}
}
else
{
}
?>
我在用户名和密码字段以及任何其他可能的基本注入中都尝试了 admin'OR'1'='1,但它不起作用。我尝试在大多数工作站点中使用基本的 sql 注入并且它有效,我只是很困惑我的代码不接受 sql 注入。
当您的凭据不正确时,它会给我同样的回声。
【问题讨论】:
-
能否让它也回显生成的sql?您应该能够手动运行它并看到预期的结果。
-
我的猜测是
if(mysqli_num_rows($result)==1)返回 false,因为1=1导致返回 所有 行,而不仅仅是 1。
标签: php sql sql-injection