首页 > 数据库 > mysql教程 > 参数化查询如何防止 SQL 注入?

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

Mary-Kate Olsen
发布: 2024-10-29 10:54:02
原创
577 人浏览过

How Do Parameterized Queries Protect Against SQL Injection?

使用参数化查询进行安全数据库交互

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); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)

$row = mysqli_fetch_array($result);

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

实现参数化查询:

为了防止SQL注入,将此代码替换为:

<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");

mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass);

mysqli_stmt_execute($stmt);

$row = mysqli_stmt_fetch($stmt);</code>
登录后复制
  • mysqli_prepare():准备参数化查询语句。
  • mysqli_stmt_bind_param(): 将输入值绑定到占位符 (?)。
  • mysqli_stmt_execute(): 执行准备好的查询。
  • mysqli_stmt_fetch(): 检索结果行。

连接处理:

在原始代码中,使用 mysqli_connect() 建立与数据库的连接。这需要在执行任何查询之前完成。在继续操作之前,请确保您拥有有效的 $dbc。

安全最佳实践:

  • 在将密码存储到数据库之前对密码进行哈希或加密。
  • 验证用户输入以防止恶意字符。
  • 对涉及用户提供的数据的所有数据库交互一致使用准备好的语句。

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

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