织梦防火墙需要拦截哪些访问路径
Web 防火墙(WAF)对织梦站点的防护效果,取决于规则覆盖是否全面。仅开启默认规则往往拦不住织梦特有的攻击向量,需要针对其目录结构、敏感文件、危险扩展名做定制化拦截。下面整理一份织梦站点应当被防火墙拦截的访问路径清单。
一、敏感目录直接访问拦截
以下目录均不应被公网直接访问,应在 nginx 或 WAF 中 deny:
# 数据与配置目录
/data/ # 数据库配置、缓存、sessions
/include/ # 核心类库
/templets/ # 模板文件
/install/ # 安装目录(应已删除)
/special/ # 专题缓存
/member/templets/ # 会员模板
/data/tplcache/ # 模板缓存
/data/backupdata/ # 数据库备份
/data/cache/ # 系统缓存
/data/sessions/ # 会话文件
/data/module/ # 模块文件
/data/mail/ # 邮件日志
/data/log/ # 系统日志
/data/mysql_error_trace.inc
二、危险扩展名访问拦截
无论在哪个目录,以下扩展名都不应通过 Web 直接访问:
location ~* \.(inc|bak|sql|log|txt|swp|tmp|old|orig|save|md|json\.bak)$ {
deny all;
return 404;
}
# 编辑器临时文件
location ~* ^/.*~$ { deny all; return 404; }
location ~* ^/\..* { deny all; return 404; }
三、uploads 目录禁止执行 PHP
uploads 是织梦最常被植入 webshell 的目录,必须禁止任何脚本执行:
location ~* /uploads/.*\.(php|php5|php7|phtml|phar|pl|py|cgi|asp|aspx|jsp)$ {
deny all;
return 404;
}
# .htaccess 也不能放
location ~* /uploads/.*\.htaccess$ {
deny all;
return 404;
}
四、plus 目录白名单访问
plus 目录中大部分脚本是非必需的攻击面,建议仅放行必要的几个:
location ~ ^/plus/(?!search\.php|list\.php|view\.php|diy\.php|count\.php|flink\.php|guestbook\.php).+\.php$ {
deny all;
return 404;
}
需要拦截的高危 plus 脚本清单:
/plus/download.php任意文件下载历史漏洞;/plus/ad_js.phpSQL 注入历史漏洞;/plus/car.php、/plus/carbuyaction.php购物车相关;/plus/infosearch.php搜索注入;/plus/recommend.php推荐注入;/plus/erraddsave.php错误提交;/plus/posttocar.php、/plus/stoa.php。
五、后台路径限流
假设后台已改名为 /manage_x7k9/,对其做限流与爆破防护:
location ^~ /manage_x7k9/ {
limit_req zone=admin burst=5 nodelay;
limit_conn admin 5;
# 配合 IP 白名单
allow 1.2.3.4;
deny all;
}
在 http 块中定义限流区域:
limit_req_zone $binary_remote_addr zone=admin:10m rate=5r/m;
六、WAF 规则补充
1. 拦截常见注入 payload
SecRule ARGS|REQUEST_URI "(?i)(union\s+select|information_schema|sleep\(|benchmark\(|into\s+outfile|load_file|0x[0-9a-f]{8,})" \
"id:2001,phase:2,deny,status:403,log,msg:'SQLi'"
SecRule ARGS "(?i)(eval\(|base64_decode\(|gzinflate\(|assert\(|system\(|passthru\(|exec\()" \
"id:2002,phase:2,deny,status:403,log,msg:'RCE'"
2. 拦截常见 XSS payload
SecRule ARGS|REQUEST_URI "(?i)(onerror|onload|javascript:|
3. 拦截路径穿越
SecRule ARGS|REQUEST_URI "(?i)(\.\./|\.\.\\|%2e%2e%2f|%2e%2e/)" \
"id:2004,phase:2,deny,status:403,log,msg:'LFI'"
WAF 规则不是越多越好,过多规则会拖慢响应并产生误报。建议先在监听模式(DetectOnly)运行一周,根据日志调整为阻断模式。
七、需要拦截的爬虫与扫描器
location / {
if ($http_user_agent ~* "(?i)(sqlmap|nikto|nmap|acunetix|wpscan|nessus|masscan|zgrab)") {
return 403;
}
}
八、验证拦截效果
- 访问
/data/common.inc.php,应返回 404; - 访问
/uploads/test.php,应返回 404; - 用 sqlmap 扫描
/plus/search.php,应被 WAF 拦截; - 查看 WAF 日志,确认高危请求被 deny。
九、注意事项
- 拦截规则上线前先在测试环境跑一周,避免误伤正常功能;
- CDN 回源 IP 需配置真实 IP 透传,否则限流会限到 CDN 节点;
- WAF 规则与 nginx location 拦截要互补,不要只依赖一层;
- 定期更新 OWASP CRS 规则集,跟进新型攻击手法。
织梦防火墙规则配置应遵循"最小暴露 + 多层拦截"原则,把敏感目录、危险扩展名、高危 plus 脚本一次性封禁,再叠加 WAF 注入/XSS 规则。建议把拦截规则纳入版本管理,每次织梦升级后回顾一次,确保新增文件类型或路径也被覆盖。拦截规则的持续维护,比一次性配置更重要。