Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql注入及其在php中的验证_Php_Sql Injection - Fatal编程技术网

Sql注入及其在php中的验证

Sql注入及其在php中的验证,php,sql-injection,Php,Sql Injection,以下代码易受Sql注入攻击吗?如何验证 $query=("select * from table2 where username = '$username'and password='$password'"); $result= mysqli_query($connect, $query); $row= mysqli_fetch_assoc($result); if ($username==$row['username']&&$password==$r

以下代码易受Sql注入攻击吗?如何验证

$query=("select * from table2 where username = '$username'and password='$password'");
$result=  mysqli_query($connect, $query);
       $row=  mysqli_fetch_assoc($result);
    if  ($username==$row['username']&&$password==$row['password'])
    {
        header('location:header.php');//to go header
        }
else
{
    header('location:insert_p.php');}

是的,您的代码似乎容易受到SQL注入的攻击。请看这一行:

$query=("select * from table2 where username = '$username' and password='$password'");
在这里,您将变量
$username
$password
直接传递到数据库。如果
$username
包含类似
admin'的字符串--则不会检查密码

如何验证? 只要确保直接放入SQL语句中的每个变量都是安全的

其他解决方案?
  • 您可以使用
    mysqli\u real\u escape\u string()
    ()来转义特殊字符,如
    '
  • 您可以使用准备好的语句。它们将代码和值分开
取决于$username和$password的外观。但是,除非你在传递密码之前对它们进行过滤,是的,绝对是。值得一读:请不要用明文存储密码。他实际上没有告诉我们这两个变量发生了什么。据我们所知,他可能是在用笑脸符号存储它们。不过,用这种方式编写查询仍然是个坏主意。在过滤掉pdo和绑定变量之后,我会使用它们输入用户名和错误密码,但仍执行else