织梦怎么禁止直接访问模板文件
织梦模板文件位于 /templets/ 目录,是 .htm/.html 文件,本身不含可执行 PHP,但能被浏览器直接打开下载。这会导致模板结构、调用标签、JS 路径、自定义变量全部泄露,攻击者据此可精准构造注入与挂马。禁止直接访问模板文件是织梦加固中常被忽略却影响很大的一步。
一、模板文件直接访问的风险
- 泄露站点目录结构与命名规则,便于攻击者定位敏感文件;
- 暴露
{dede:global.cfg_xxx/}调用的配置变量名,便于社会工程; - 暴露自定义 JS、CSS 路径,便于构造伪造页面或 XSS;
- 被搜索引擎收录后形成大量重复内容,影响正常页面收录。
二、验证当前是否可被访问
直接访问以下 URL,若能下载到模板源码,说明存在风险:
https://www.example.com/templets/default/index.htm
https://www.example.com/templets/default/article_article.htm
https://www.example.com/templets/default/list_article.htm
三、Nginx 配置禁止访问
1. 整目录拦截
location ^~ /templets/ {
deny all;
return 404;
}
^~ 前缀表示匹配后不再走正则,是最稳的方式。返回 404 而非 403,避免暴露目录存在的事实。
2. 仅拦截模板扩展名
若模板被二次开发放在其他目录,可按扩展名拦截:
location ~* \.(htm|html|tpl|lbi)$ {
if ($request_uri ~ ^/templets/) {
return 404;
}
}
3. 同时拦截模板缓存
location ^~ /data/tplcache/ {
deny all;
return 404;
}
四、Apache 配置禁止访问
1. 站点配置文件
<Directory "/var/www/html/templets">
Require all denied
</Directory>
2. .htaccess 写在 templets 目录内
# /templets/.htaccess
<FilesMatch "\.(htm|html|tpl|lbi)$">
Require all denied
</FilesMatch>
五、织梦程序层处理
1. 修改默认模板扩展名
部分站长会把 .htm 改为 .tpl.php,让模板在被直接访问时返回空白:
<?php if(!defined('DEDEINC')) exit('Forbidden'); ?>
<!-- 模板内容 -->
但这需要配合织梦模板引擎改造,不推荐新手操作。
2. 在模板顶部加防直接访问判断
<?php
if(!defined('DEDEINC')){
header('HTTP/1.1 404 Not Found');
exit('404');
}
?>
注意:仅当模板被作为 PHP 解析时此方法才生效,需配合服务器把 .htm 也交给 PHP 处理。
最稳妥的方案仍然是 nginx/apache 整目录拦截,不依赖模板改造,升级织梦也不会失效。
六、其他需要禁止访问的目录
除 templets 外,以下目录也应一并禁止外网访问:
location ^~ /data/ { deny all; return 404; }
location ^~ /include/ { deny all; return 404; }
location ^~ /install/ { deny all; return 404; }
location ^~ /member/templets/ { deny all; return 404; }
location ^~ /special/ { deny all; return 404; }
七、验证拦截效果
- 浏览器访问
/templets/default/index.htm,应返回 404; - 访问
/templets/default/images/,确认模板内图片资源是否仍可加载(若前端引用了模板内图片,需要放行 .jpg/.png/.css/.js); - 用 curl 验证:
curl -I https://www.example.com/templets/default/index.htm; - 百度搜索
site:example.com templets,若有收录提交死链删除。
八、注意事项
- 部分织梦模板把 CSS/JS 直接放在
/templets/default/style/,整目录拦截会让样式失效,需放行静态资源; - 放行静态资源时仅允许具体扩展名,禁止 .php:
location ~* /templets/.*\.(css|js|jpg|png|gif|woff|svg)$ { allow all; } - 移动端模板
/templets/plus/也需同步处理; - CDN 配置同步拦截
/templets/,否则攻击者从 CDN 边缘仍可获取。
禁止直接访问模板文件看似细节,实则是站点信息泄露防护的关键一环。建议把
/templets/、/data/、/include/、/install/ 四个目录的拦截配置一次性写入 nginx server 块,并把验证步骤加入上线 checklist。当攻击者无法通过模板反推你的站点结构时,针对织梦的常规扫描成功率会大幅下降。