首页 >后端开发 >php教程 >如何安全地将PHP变量插入MySQL语句以防止SQL注入?

如何安全地将PHP变量插入MySQL语句以防止SQL注入?

Patricia Arquette
Patricia Arquette原创
2024-12-25 16:47:14874浏览

How to Safely Insert PHP Variables into MySQL Statements to Prevent SQL Injection?

将 PHP 变量插入 MySQL 语句

在 MySQL 语句中包含 PHP 变量时,必须了解规则以确保数据完整性并防止潜在的安全漏洞。

1.对数据文字使用预准备语句

内容: 表示 SQL 数据文字(字符串或数字)的所有 PHP 变量都必须包含在预准备语句中。

原因: 准备好的语句通过防止 SQL 注入来清理和保护数据攻击。

如何:

  • 在 SQL 查询中用占位符替换变量。
  • 准备查询。
  • 将变量绑定到占位符。
  • 执行

使用 mysqli 的示例:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

如何使用 PDO:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

2。查询部分的白名单过滤

内容:表示其他查询部分(关键字、标识符)的变量必须通过允许值的“白名单”进行过滤。

原因:为了防止恶意用户注入未经授​​权的查询部分或关键字。

如何:

  • 创建允许值的列表。
  • 在将变量包含在查询中之前对照列表检查变量.
  • 根据数据库语法格式化标识符(例如,反引号MySQL).

示例:

$orderby = $_GET['orderby'] ?: "name";
$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) {
    throw new InvalidArgumentException("Invalid field name");
}
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

以上是如何安全地将PHP变量插入MySQL语句以防止SQL注入?的详细内容。更多信息请关注PHP中文网其他相关文章!

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