首页 >后端开发 >php教程 >`mysqli_real_escape_string` 是否提供针对 SQL 注入的完整保护?

`mysqli_real_escape_string` 是否提供针对 SQL 注入的完整保护?

Linda Hamilton
Linda Hamilton原创
2024-12-20 03:02:13643浏览

Does `mysqli_real_escape_string` Offer Complete Protection Against SQL Injection?

“mysqli_real_escape_string”可以完全防止 SQL 注入吗?

考虑以下示例代码:

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);

$query = "INSERT INTO `users` (`email`,`psw`) 
           VALUES ('" . $email . "','" . $psw . "')";

此代码是否安全,可防止 SQL 注入和其他攻击

答案: 否。

正如提供的代码示例中所强调的,“mysqli_real_escape_string”单独不足以保证防止 SQL 注入。攻击者可以利用其实现中的漏洞绕过过滤并危害应用程序。

推荐解决方案:

防止 SQL 注入的最有效方法是使用准备好的陈述。准备好的语句将数据与 SQL 查询隔离开来,确保外部输入不会干扰查询结构。此外,请考虑实施严格的白名单,以专门针对其预期目的过滤数据。这种方法可以最大限度地降低 SQL 注入和其他安全漏洞的风险。

使用预准备语句的安全查询示例:

$stmt = $db->prepare(
    "SELECT * FROM table 
    WHERE col = ? ORDER BY {$sortby} ASC 
    LIMIT ?, ?"
);
$stmt->execute(['value', $start, $howmany]);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

通过合并这些措施,您可以显着增强 SQL 操作的安全性,抵御恶意攻击。

以上是`mysqli_real_escape_string` 是否提供针对 SQL 注入的完整保护?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn