首页 >后端开发 >php教程 >什么是 SQL 注入?以及如何预防

什么是 SQL 注入?以及如何预防

Barbara Streisand
Barbara Streisand原创
2024-12-31 17:28:38308浏览

SQL Injection คืออะไร? และวิธีการป้องกัน

SQL注入

这是一种在使用 SQL(结构化查询语言)作为数据库管理语言的数据库系统中常见的安全攻击。当攻击者将恶意 SQL 代码注入用户输入字段(例如表单字段或 URL)以不当访问或修改数据库中的数据时,就会发生这种攻击。

SQL 注入在 2021 年 OWASP Top 10 中排名第 3,这是开放 Web 应用程序安全项目 (OWASP) 列出的 Web 应用程序最常见和最重要的安全漏洞列表,该列表每次都会更新。多年来反映不断变化的网络威胁

SQL Injection คืออะไร? และวิธีการป้องกัน

SQL 注入攻击被列为第三大威胁,这表明了该问题在 Web 应用程序安全方面的重要性和普遍性。正确处理注入攻击对于保护信息系统和防止不必要的访问至关重要

如何攻击SQL注入

SQL 注入攻击可以通过多种不同方式进行,但最常见的有两种:

  • 直接在输入字段中插入值
  • 编辑 URL 添加 SQL 语句

SQL 注入攻击示例

假设有一个Web应用程序允许用户使用PHP代码登录

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

此代码存在漏洞,因为将用户值直接插入到 SQL 语句中可能会导致 SQL 注入

SQL注入攻击

黑客可以将恶意值插入到这样的字段中

  • 用户名字段 ' OR '1'='1
  • 密码字段 ' OR '1'='1

这使得 SQL 语句看起来像这样

SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'

因为 '1'='1' 是一个始终为真的条件。此命令返回数据库中每个用户的信息。这使得黑客无需使用真实密码即可登录

如何防止SQL注入

有多种方法可以防止 SQL 注入,例如

  • 使用准备好的语句
  • 使用存储过程
  • 过滤和验证输入数据。 ## 在 PHP 中使用准备语句的示例
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

在这个例子中,SQL语句是预先准备好的,$username和$password值稍后插入到语句中。这使得注入恶意 SQL 代码变得不可能

总结

SQL 注入是一个严重的威胁。但是可以通过编写安全代码来防止这种情况,例如使用准备好的语句和验证输入。良好的保护不仅有助于确保数据安全。但它也有助于维持系统的可靠性。

以上是什么是 SQL 注入?以及如何预防的详细内容。更多信息请关注PHP中文网其他相关文章!

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