使用参数化查询进行安全数据库交互
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_connect() 建立与数据库的连接。这需要在执行任何查询之前完成。在继续操作之前,请确保您拥有有效的 $dbc。
安全最佳实践:
以上是参数化查询如何防止 SQL 注入?的详细内容。更多信息请关注PHP中文网其他相关文章!