首页 > 数据库 > mysql教程 > PHP 和 MySQL 中的参数化查询如何防范 SQL 注入攻击?

PHP 和 MySQL 中的参数化查询如何防范 SQL 注入攻击?

Linda Hamilton
发布: 2024-10-28 19:03:02
原创
649 人浏览过

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

用于安全 PHP-MySQL 连接的参数化查询

SQL 注入对 Web 应用程序构成严重的安全威胁。通过操纵 SQL 查询,攻击者可以获得对敏感数据的未经授权的访问或破坏数据库操作。参数化查询提供了缓解此漏洞的有效对策。

以下是登录页面中的一段代码,说明了如何使用 MySQL 在 PHP 中准备参数化查询:

<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection

$userName = $_POST["username"];
$userPass = $_POST["password"];

$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);

if (!$row) {
    echo "No existing user or wrong password.";
}</code>
登录后复制

此代码使用 mysqli_connect 建立与 MySQL 数据库的连接,并将连接标识符分配给 $dbc。 $userName 和 $userPass 变量接收用户在登录页面输入的用户名和密码。

mysqli_prepare 函数初始化准备好的语句。将执行的 SQL 查询作为第一个参数传递。在这种情况下,它从用户表中检索用户名和密码与输入参数匹配的所有行。

接下来,mysqli_stmt_bind_param 用于将用户提供的输入参数 $userName 和 $userPass 绑定到准备好的语句中的占位符 (?)。代码指定两个参数都是数据类型 s(字符串)。

mysqli_stmt_execute 函数执行准备好的语句。

最后,mysqli_stmt_fetch 从结果集中检索第一行并将其分配给$row 变量。

通过使用参数化查询,此代码可确保恶意 SQL 语句无法执行,从而防止 SQL 注入攻击。

为了增加安全性,强烈建议加密或者在将用户密码存储到数据库之前对其进行哈希处理。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板