CentOS 上保障 JSP 安全的可落地方案
一 访问入口与容器层加固
<servlet>
<servlet-name>hello</servlet-name>
<jsp-file>/WEB-INF/hello.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.mldn</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>JSPs</web-resource-name>
<url-pattern>/web/*</url-pattern>
</web-resource-collection>
<auth-constraint/> <!-- 无角色可访问,即拒绝 -->
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
二 系统与文件权限最小化
chown -R tomcat:tomcat /usr/share/tomcat/webapps /usr/share/tomcat/work /usr/share/tomcat/logs
chmod 750 /usr/share/tomcat/webapps /usr/share/tomcat/work /usr/share/tomcat/logs
find /usr/share/tomcat/webapps -type f -exec chmod 640 {} +
find /usr/share/tomcat/webapps -type d -exec chmod 750 {} +
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
以上做法可显著降低越权访问与篡改风险。
三 运行环境与部署安全
四 快速检查清单
| 检查项 | 期望状态/做法 |
|---|---|
| JSP 位置 | 位于 WEB-INF,通过 Servlet/Filter/Controller 转发访问 |
| 直接访问拦截 | web.xml 配置 security-constraint 拒绝访问或要求认证 |
| 目录浏览 | listings=false,无索引页泄露 |
| 默认应用 | 已删除 docs/examples/host-manager/manager/ROOT |
| 服务标识 | server=“”,隐藏 Server/版本 信息 |
| 运行账户 | 专用 tomcat 用户,Systemd 设置 User/Group/UMask |
| 目录权限 | 部署与工作目录 750,文件 640,属主 tomcat:tomcat |
| 端口与防火墙 | 仅开放 8080/8443,限制来源 IP(可选) |
| 日志与监控 | 开启访问/应用日志,定期审计异常 4xx/5xx 与可疑路径访问 |