关于敏感文件或备份 安全配置错误 禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件
要禁止通过 URL 访问 Vue 项目打包后的 .gz
压缩文件(如 sc.6abb69d9.css.gz
)或其他敏感文件,可以通过 Nginx 配置和 Tomcat 配置双重防护来实现。以下是具体解决方案:
方法 1:通过 Nginx 配置禁止访问 .gz
文件
在 Nginx 的配置文件中(通常是 /etc/nginx/conf.d/your-site.conf
或 /etc/nginx/sites-available/default
),添加以下规则:
server {listen 80;server_name xxx.mrt.cn;location ~* \.gz$ {deny all;return 404;}# 其他配置(如反向代理到 Tomcat)location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
作用:
location ~* \.gz$
匹配所有.gz
文件请求。deny all;
拒绝所有访问,返回403 Forbidden
。return 404;
可改为直接返回404
(更隐蔽)。
生效方式:
sudo nginx -t # 检查语法
sudo systemctl reload nginx # 重新加载配置
方法 2:Tomcat 禁止直接访问静态资源
如果 Nginx 只是反向代理,而 .gz
文件实际存放在 Tomcat 的 webapps/ROOT
目录下,可以通过 Tomcat 的 web.xml
限制访问:
- 编辑
conf/web.xml
,在<web-app>
标签内添加:
<security-constraint><web-resource-collection><web-resource-name>Block gz files</web-resource-name><url-pattern>*.gz</url-pattern></web-resource-collection><auth-constraint><role-name>none</role-name> <!-- 拒绝所有角色访问 --></auth-constraint>
</security-constraint>
- 重启 Tomcat:
sudo systemctl restart tomcat
方法 3:Vue 构建时不生成 .gz
文件(推荐)
如果不需要 HTTP 服务器自动提供 .gz
压缩文件,可以在 Vue 的构建配置中禁用 gzip
压缩:
- 修改
vue.config.js
:
module.exports = {chainWebpack: (config) => {config.plugins.delete('compression'); // 移除 gzip 压缩插件}
};
- 重新构建并部署:
npm run build
这样构建后的 dist
目录不会生成 .gz
文件,从根本上解决问题。
方法 4:服务器文件系统权限控制
直接限制 Linux 文件系统的访问权限:
# 进入 Tomcat 的静态资源目录
cd /path/to/tomcat/webapps/ROOT/static/css# 移除 .gz 文件(谨慎操作!)
rm *.gz# 或修改权限,禁止 Nginx/Tomcat 用户读取
chmod 600 *.gz # 仅所有者可读,其他用户无权限
安全加固建议
- 隐藏服务器信息:
在 Nginx 中关闭Server
头:server_tokens off;
- 禁用目录列表:
防止目录遍历攻击:location / {autoindex off; }
- 日志监控:
检查 Nginx 访问日志,排查异常请求:tail -f /var/log/nginx/access.log | grep '\.gz'
最终方案推荐
- 短期修复:用 Nginx 的
deny
规则(方法 1)快速拦截请求。 - 长期解决:修改 Vue 构建配置(方法 3),避免生成不必要的
.gz
文件。 - 深度防护:结合 Tomcat 安全约束(方法 2)和 文件权限控制(方法 4)。
以上方法可有效防止敏感文件泄露,符合 A5 安全配置错误(敏感信息泄露)的修复要求。