织梦防火墙需要拦截哪些访问路径

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.php SQL 注入历史漏洞;
  • /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;
    }
}

八、验证拦截效果

  1. 访问 /data/common.inc.php,应返回 404;
  2. 访问 /uploads/test.php,应返回 404;
  3. 用 sqlmap 扫描 /plus/search.php,应被 WAF 拦截;
  4. 查看 WAF 日志,确认高危请求被 deny。

九、注意事项

  • 拦截规则上线前先在测试环境跑一周,避免误伤正常功能;
  • CDN 回源 IP 需配置真实 IP 透传,否则限流会限到 CDN 节点;
  • WAF 规则与 nginx location 拦截要互补,不要只依赖一层;
  • 定期更新 OWASP CRS 规则集,跟进新型攻击手法。
织梦防火墙规则配置应遵循"最小暴露 + 多层拦截"原则,把敏感目录、危险扩展名、高危 plus 脚本一次性封禁,再叠加 WAF 注入/XSS 规则。建议把拦截规则纳入版本管理,每次织梦升级后回顾一次,确保新增文件类型或路径也被覆盖。拦截规则的持续维护,比一次性配置更重要。