“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中文网其他相关文章!