首页  >  文章  >  数据库  >  PHP 中的参数化查询如何防止 SQL 注入?

PHP 中的参数化查询如何防止 SQL 注入?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-28 06:00:03873浏览

How do Parameterized Queries in PHP Protect Against SQL Injection?

使用 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>

以下是代码细分:

  • mysqli_prepare() 准备一个参数化语句,其中包含代表参数的占位符 (?)。
  • mysqli_stmt_bind_param() 将值绑定到占位符参数。
  • mysqli_stmt_execute() 执行参数化语句。
  • mysqli_stmt_fetch() 检索结果行。

在此参数化查询中,占位符可防止注入恶意输入,因为它们被绑定值替换。此外,为了增强安全性,必须对密码进行加密或哈希处理,避免存储明文密码。通过采用参数化查询,PHP 开发人员可以有效保护其 Web 应用程序免受 SQL 注入攻击。

以上是PHP 中的参数化查询如何防止 SQL 注入?的详细内容。更多信息请关注PHP中文网其他相关文章!

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