防止Apache目录遍历攻击,是Web服务器安全里绕不开的一环。这类攻击虽然经典,但杀伤力从不打折,尤其当服务器配置存在漏洞时,攻击者能像翻跟斗一样轻松访问到本不该暴露的文件。好在这不是无解的问题,下面这套防护思路,基本上覆盖了从配置到底层加固的各个关键节点。

1. 使用安全的文件路径处理
- 验证用户输入:用户提供的路径参数,一定要做严格过滤。别直接拿来就用——攻击者最喜欢在路径里塞
../这类跳级符号。加一道白名单校验或者正则清洗,能挡掉不少低级但致命的尝试。 - 限制访问目录:在Apache配置里明确指定哪些目录是允许公开访问的,比如
/var/www/下的内容可以开放,但/etc/、/usr/local/这类系统目录,必须提前封死。
2. 配置Apache的AllowOverride和Require指令
- 限制.htaccess文件的威力:在
指令中把AllowOverride设为None,等于切断了用户通过.htaccess绕过安全规则的通道。别小看这个设置,很多渗透测试案例正是从这里撕开口子的。 - 用
Require指令精准限流:明确写出允许访问的IP或用户范围,比如只让内网192.168.x.x的请求通过,其他一律拒绝。代码示例:Require all grantedRequire ip 192.168.1.1
3. 启用mod_rewrite模块
- 重写规则做一道拦截网:通过
mod_rewrite把不安全的请求转走或者直接拒绝。例如,只允许访问实际存在的文件或目录,否则一律交给默认入口处理,这样目录遍历的路径请求就会落空。配置片段:RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.html [L]
4. 使用mod_security模块
- 配置安全规则,自动拦截:安装
mod_security后,可以设定规则检测请求中的路径遍历特征——比如含有连续点号或斜杠组合的字符串,直接返回403。示例:
这条规则能挡住大量的自动化扫描工具。SecRule REQUEST_FILENAME "@rx \.\." "id:1000001,deny,status:403"
5. 限制文件下载和上传
- 验证文件名,拒绝危险字符:无论是下载还是上传,文件名里出现
../或其他路径跳转字符串,直接拒绝。不要试图去“清洗”——最简单的做法就是白名单,只允许字母数字和下划线。 - 使用白名单限制文件类型:只允许特定扩展名(如.jpg、.png、.pdf)的文件上传,同时检查文件头是否与扩展名匹配。这一步能堵住很多利用上传功能进行的路径遍历攻击。
6. 定期更新和修补
- 保持Apache版本最新:每个新版本通常都修复了已知的漏洞,包括目录遍历相关的安全缺陷。别嫌麻烦,定期升级是最省心的防线。
- 及时打补丁:操作系统和第三方库的补丁也别忘了——很多攻击链条是从底层环境突破的。
7. 监控和日志记录
- 开启详细日志:Apache的访问日志里藏着攻击者的“脚印”。如果没开详细记录,出事之后连回溯的基础都没有。建议记录请求URI、来源IP、User-Agent等关键字段。
- 用监控工具盯住异常行为:比如短时间内大量包含
../的请求,或者对/etc/passwd等敏感路径的访问,都该触发告警。
8. 使用防火墙和安全组
- 配置防火墙规则:只开放必要的端口(比如80、443),并对来源IP做最小化放行。不要指望Apache本身能隔离所有坏流量,防火墙是第一道物理屏障。
- 云环境下的安全组:如果服务器部署在云上,利用安全组策略限制哪些IP可以访问Web服务。配合VPC隔离,效果更好。
说到底,目录遍历攻击的防范并不复杂,难的是把这些措施落实到位,并且形成持续维护的习惯。上面提到的每一层都不是孤立的,组合使用才能构建出真正的纵深防御。只要做到位,绝大多数自动化扫描和手工试探都会被挡在门外。
