Sql注入及其在php中的验证
以下代码易受Sql注入攻击吗?如何验证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
$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