当前位置: 首页 > news >正文

PHPWeb安全通用防护策略

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。把这几条牢牢记住了,大部分安全漏洞都能避免。

http://www.jsqmd.com/news/961486/

相关文章:

  • 上海除甲醛公司实地调研:甄选标准与全国直营品牌发展剖析 - 速递信息
  • 2026年膜结构工程实力推荐:上海尚朗建筑装饰工程有限公司全系产品解析 - 品牌推荐官
  • 3步突破网盘下载瓶颈:LinkSwift直链下载助手完全指南
  • 2026 南通卫生间厨房阳台地下室漏水维修商家测评,多家防水企业综合评分横向对比,帮本地业主甄选靠谱堵漏维保团队 - 吉修匠
  • 技术深度解析:google-translate-api 如何实现免费无限制的Google翻译服务
  • JoyCon-Driver:在Windows上使用Switch Joy-Con控制器的终极指南
  • 2026 东莞奢侈品全品类避坑攻略,6 家门店行情实测,一站式变现指南 - 薛定谔的梨花猫
  • Atom简体中文汉化包:三分钟让你的编辑器说中文
  • ArchivePasswordTestTool:免费开源的压缩包密码恢复终极指南
  • 2026年成都婚姻法律服务推荐:沈辉律师15年专注离婚纠纷及财产分割 - 品牌推荐官
  • 调查研究-160 Gemini CLI 停服迁移指南:从个人免费到 Antigravity 2.0 的完整解析
  • HarmonyOS分布式开发实战:跨设备亲子涂鸦应用架构与实现
  • 2026 青岛卫生间厨房阳台地下室漏水维修商家测评,多家防水企业综合评分横向对比,帮本地业主甄选靠谱堵漏维保团队 - 吉修匠
  • 2026年ESD防静电闸机厂家推荐:苏州捷德全系产品助力智能制造安全管控 - 品牌推荐官
  • MICROSD CARD的MLC和SLC、TLC的区别。
  • OrCAD DRC报错[DRC0011]解析:元件位号命名规范与解决方案
  • 2026杭州新中式别墅灯光设计要点:从光线层次到柜体发光,这些细节藏着空间的气质 - 十大品牌排行榜
  • 别再只用坐标输点了!UG NX点构造器的5个高阶技巧,让你建模效率翻倍
  • HFSS新手避坑指南:手把手教你仿真威尔金森功分器(附参数设置与模型文件)
  • 硬件工程师避坑指南:原装、散新、翻新芯片鉴别与采购实战
  • LTC6812芯片C++驱动代码包(支持12–18串锂电、SPI通信、均衡控制与故障解析)
  • Speechless:3分钟学会微博PDF备份,永久保存你的社交记忆
  • 北京东卫靳双权律师:18年深耕房产继承纠纷,专业化解遗嘱继承复杂案件 - 品牌推荐官
  • PCB设计实战:从试产失败看工程师的工艺兼容性与DFM盲区
  • 广东宠物包装定制工厂避坑指南:3个关键指标帮你筛选 - 变量人生001
  • 2026年武汉高三复读及冲刺班推荐:武汉前程卓越教育培训学校实力之选 - 品牌推荐官
  • MTK刷机工具完整攻略:三步掌握联发科设备底层操作
  • PIC32 DMA机制深度解析:从核心概念到实战配置与避坑指南
  • 2026年民间借贷法律服务优选:朗宇清律师,专业咨询与合理收费标准解析 - 品牌推荐官
  • 深度解析:注册公司,一文看懂不同城市不同行业注册要求 - 速递信息