PHP 安全防御:SQL 注入、XSS 与 CSRF
安全是 Web 应用的生命线,需从输入到输出全面防护。
1. SQL 注入防御(预处理)
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute([':id' => $id]);2. XSS 防御(输出转义)
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');框架如 Laravel Blade 默认转义:{{ $var }}。
3. CSRF 防御(令牌)
// 生成
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 表单隐藏域
<input type='hidden' name='csrf_token' value="<?php echo $_SESSION['csrf_token']; ?>">
// 验证
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF 攻击检测');
}Laravel 自动处理:@csrf。
4. 文件上传安全
- 限制文件类型和大小。
- 使用
mime_content_type验证真实类型。 - 重命名文件,避免路径遍历。
遵循“输入过滤、输出转义”原则,可抵御多数攻击。
