php注入实现
PHP注入(通常指SQL注入)是一种利用Web应用程序对用户输入处理不当,通过构造恶意输入来操纵数据库查询的攻击方式。以下是关于PHP中SQL注入的原理、示例及防护方法的说明:
SQL注入原理
当PHP代码直接将用户输入拼接到SQL查询语句中时,攻击者可通过输入特殊字符(如单引号')或SQL关键字(如UNION、DROP)篡改原始查询逻辑,可能导致数据泄露、篡改或删除。
示例:易受攻击的代码
$user_input = $_GET['username'];
$query = "SELECT * FROM users WHERE username = '$user_input'";
// 若用户输入 `admin' OR '1'='1`,查询变为:
// SELECT * FROM users WHERE username = 'admin' OR '1'='1' (返回所有用户)
防护方法
使用预处理语句(PDO或MySQLi)
通过参数化查询分离SQL逻辑与数据,防止输入被解释为SQL代码。
// PDO示例
$pdo = new PDO($dsn, $user, $password);
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $_GET['username']]);
转义用户输入(不推荐作为主要手段)
使用mysqli_real_escape_string对特殊字符转义,但预处理语句更安全。
$escaped_input = mysqli_real_escape_string($conn, $_GET['username']);
$query = "SELECT * FROM users WHERE username = '$escaped_input'";
输入验证
限制输入格式(如仅允许字母数字):
if (!preg_match('/^[a-zA-Z0-9]+$/', $_GET['username'])) {
die("Invalid input");
}
最小权限原则
数据库用户应仅拥有必要权限,避免使用root账户。
其他注入类型
- 命令注入:避免将用户输入传递给
exec()、system()等函数。 - XSS(跨站脚本):使用
htmlspecialchars()输出用户内容到HTML。
安全工具推荐
- OWASP ZAP:自动化漏洞扫描工具。
- PHPStan:静态代码分析工具,可检测潜在漏洞。
通过结合预处理语句、输入验证和最小权限,可有效防御PHP中的注入攻击。






