使用 MySQL 连接进行 PHP 参数化查询
在 Web 开发领域,SQL 注入构成了重大的安全威胁。通过编造恶意查询,攻击者可以绕过身份验证机制并访问敏感数据。参数化查询为该漏洞提供了万无一失的解决方案。
让我们考虑 PHP 登录页面中的一段代码,该代码片段无法防范 SQL 注入:
<code class="php">$userName = $_POST["username"]; $userPass = $_POST["password"]; $query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'"; $result = mysqli_query($dbc, $query); $row = mysqli_fetch_array($result); if (!$row) { echo "No existing user or wrong password."; }</code>
要使用参数化查询,我们需要建立与数据库的连接并准备参数化语句。以下代码提供了修改后的示例:
<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?"); mysqli_stmt_bind_param($stmt, "s", $userName); mysqli_stmt_bind_param($stmt, "s", $userPass); mysqli_stmt_execute($stmt); $row = mysqli_stmt_fetch($stmt);</code>
以下是代码细分:
在此参数化查询中,占位符可防止注入恶意输入,因为它们被绑定值替换。此外,为了增强安全性,必须对密码进行加密或哈希处理,避免存储明文密码。通过采用参数化查询,PHP 开发人员可以有效保护其 Web 应用程序免受 SQL 注入攻击。
以上是PHP 中的参数化查询如何防止 SQL 注入?的详细内容。更多信息请关注PHP中文网其他相关文章!