PHPWeb安全通用防护策略
2026/6/6 12:13:19 网站建设 项目流程

PHPWeb安全通用防护策略

Web安全是开发的基础。从输入验证到输出转义,每一步都关系到应用的安全。今天说说PHP中基础的Web安全防护。

防止路径遍历。

```php
function safeFilePath(string $baseDir, string $path): string
{
$baseDir = realpath(rtrim($baseDir, '/'));
$fullPath = realpath($baseDir . '/' . $path);

if ($fullPath === false || !str_starts_with($fullPath, $baseDir)) {
throw new RuntimeException("无效的文件路径");
}

return $fullPath;
}

try {
$path = safeFilePath('/var/www/uploads', $_GET['file']);
readfile($path);
} catch (RuntimeException $e) {
echo "文件访问被拒绝";
}
?>

防止HTTP响应头注入。

```php
$location = filter_var($_GET['redirect'] ?? '', FILTER_SANITIZE_URL);
if (filter_var($location, FILTER_VALIDATE_URL)) {
header("Location: $location");
}

// 安全地设置头信息
function safeHeader(string $name, string $value): void
{
$name = str_replace(["\r", "\n"], '', $name);
$value = str_replace(["\r", "\n"], '', $value);
header("$name: $value");
}
?>

文件包含防护。

```php
// 不安全
include $_GET['page'] . '.php';

// 安全
$allowedPages = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (!in_array($page, $allowedPages)) $page = 'home';
include __DIR__ . '/pages/' . $page . '.php';
?>

反序列化防护。

```php
// 不安全
$data = unserialize($_POST['data']);

// 安全
function safeUnserialize(string $data, array $allowedClasses = []): mixed
{
return unserialize($data, ['allowed_classes' => $allowedClasses]);
}

$data = safeUnserialize($_POST['data'], [User::class]);
?>

安全响应头。

```php
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
header('X-XSS-Protection: 1; mode=block');
header('Referrer-Policy: strict-origin-when-cross-origin');
header("Content-Security-Policy: default-src 'self'");
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
?>

输入验证的基本原则。

```php
// 验证邮箱
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) die("无效的邮箱");

// 验证整数范围
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => 150]]);
if ($age === false) die("无效的年龄");

// 验证URL
$url = filter_var($_POST['url'], FILTER_VALIDATE_URL);
if ($url === false) die("无效的URL");
?>

Web安全的几个基本原则。不要信任用户输入,输出到HTML要转义,敏感信息加密存储,关键操作验证权限和token。把这几条牢牢记住了,大部分安全漏洞都能避免。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询