核心思路是通过路径隔离、权限最小化、运行时校验和waf过滤四层防护限制web应用活动范围。具体包括:限定独立根路径并严格配置服务器访问控制;以最小权限用户运行服务进程;在应用层主动校验所有路径操作是否落在预设沙盒内;在waf层拦截高危路径片段并实施接口级访问控制。

核心思路是:不让应用随便“走动”,只给它划好活动范围,再加几道门禁。
明确应用专属路径并强制绑定
每个 Web 应用必须运行在独立、预设的根路径下(如 /app/payment 或 /app/reporting),不能共享或跨出该路径。服务器配置(如 Nginx 的 location 块或 Apache 的 <directory></directory>)需严格限定其可访问的 URI 前缀,并拒绝所有未显式授权的路径匹配。例如:
- Nginx 中禁止使用通配符 location(如
location / { ... })覆盖应用路径; - 对应用路径启用
alias而非root,确保物理目录与 URL 路径一一映射,避免路径解析歧义; - 禁用自动索引(
autoindex off)和符号链接跟随(disable_symlinks on),防止目录遍历或跳转到外部路径。
服务进程以最小权限用户运行
Web 应用不应以 root 或高权限用户启动。应为每个应用创建专用系统用户(如 www-payment),仅赋予其对自身代码目录、日志目录和临时上传目录的读写权限,且这些目录的父级不可写。关键操作:
- 设置目录所有权:
chown -R www-payment:www-payment /var/www/payment; - 收紧权限:
chmod 750 /var/www/payment,敏感文件(如配置)设为640; - 运行时进程(如 PHP-FPM pool、Node.js 进程)明确指定
user和group,禁止提权。
运行时路径访问做主动拦截
即使路径已限定,也要在应用层做二次校验。任何涉及文件读写、模块加载、模板渲染的操作,都需验证目标路径是否落在预设沙盒内。典型做法:
- 定义合法基路径常量(如
APP_ROOT = '/var/www/payment'); - 所有
file_get_contents()、include、fopen()等调用前,用realpath($input)解析后判断是否以APP_ROOT开头; - 拒绝含
../、~、空字节或绝对路径的输入,不依赖简单字符串替换,而用标准路径归一化函数处理。
配合 WAF 做路径层语义过滤
在反向代理或 WAF 层(如华为云 WAF、ModSecurity)启用路径规则,从入口处阻断可疑访问模式:
- 拦截包含
..%2f、%00、/etc/passwd、/proc/self/environ等高危路径片段的请求; - 限制 HTTP 方法:对静态资源路径(如
/app/payment/static/)只允许 GET/HEAD; - 对管理接口路径(如
/app/payment/admin/)强制要求 JWT 校验 + IP 白名单,不放行任何未经鉴权的路径访问。











