据我所知,如果我不使用mysqli_real_escape_string(),我可能会在数据库中输入错误的条目。如果我错了,请纠正我。
有任何缺点吗?
答案 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'
如果密码不正确,那将返回管理员的角色。