如果我不使用mysqli_real_escape_string()有什么缺点?

时间:2016-04-17 12:44:37

标签: php

据我所知,如果我不使用mysqli_real_escape_string(),我可能会在数据库中输入错误的条目。如果我错了,请纠正我。

有任何缺点吗?

1 个答案:

答案 0 :(得分:2)

请勿使用它,而是使用prepared statements。这是避免SQL injection的方法。

简而言之,您需要执行某些事情以防止将字符串附加到SQL上,这会改变其含义(通过智能使用引号等)。虽然 mysqli_real_escape_string 解决了很多这些问题,但它不是防弹的。

只是SQL注入的一个例子:

假设你有这个错误的代码:

$name = $_POST['name'];
$password = $_POST['password'];
$sql = "SELECT role FROM user 
         WHERE name = '$name' AND password = '$password'";
$result=mysqli_query($con,$sql);
$row = $result->fetch_assoc();
if ($row['role'] === 1) { 
      // do all kinds of stuff allowed to admin.
}    

...黑客填写用户名/密码表格如下

  

用户名: admin
  密码:'或名称='admin

然后对SQL的外观进行成像:

SELECT role FROM user 
WHERE name = 'admin' AND password = '' OR name='admin'

如果密码不正确,那将返回管理员的角色。

相关问题