温馨提示×

CentOS中JSP文件如何安全管理

小樊
33
2025-11-29 23:34:37
栏目: 编程语言

CentOS 上保障 JSP 安全的可落地方案

一 访问入口与容器层加固

  • 将视图 JSP 放入 WEB-INF(或其子目录),使其不在公共文档树中,用户无法直接通过 URL 访问;如确需访问,通过 Servlet 映射或前端控制器转发。注意:个别早期容器对 WEB-INF 的支持存在差异,上线前请验证目标容器的行为。示例映射:
    <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>
    
  • web.xml 使用容器级访问控制,显式拒绝直接访问某路径下的 JSP:
    <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>
    
  • 禁止目录浏览:编辑 conf/web.xml,将 DefaultServlet 的 listings 设为 false,避免暴露目录结构。
  • 删除或限制管理应用:清理 webapps 下的 docs、examples、host-manager、manager、ROOT 等默认应用,减少攻击面。
  • 隐藏服务标识:在 server.xml Connector 中设置 server=“”,并修改 catalina.jarServerInfo.properties 以去除版本信息,降低信息泄露风险。

二 系统与文件权限最小化

  • 运行身份隔离:创建专用系统用户(如 tomcat)运行 Tomcat,禁止以 root 直接启动;在 Systemd 服务中设置 User=tomcat、Group=tomcat,并使用 UMask=0007 收紧新文件权限。
  • 文件与目录权限:
    • 部署目录(如 /usr/share/tomcat/webapps)建议 750/755,仅属主与同组可读写执行;
    • 工作与日志目录(如 work、logs、temp)建议 750,仅服务账户可写;
    • 使用 chown/chgrp 明确属主与属组,避免其他用户写入;
    • 谨慎使用递归与 777,必要时用 find … -type f -exec chmod 640 {} + 等精细化设置。
  • 示例(按实际路径调整):
    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 {} +
    
  • 防火墙与端口:仅开放必要端口(如 8080/8443),示例:
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload
    

以上做法可显著降低越权访问与篡改风险。

三 运行环境与部署安全

  • 运行环境:安装受支持的 JDK,通过包管理器(如 yum)部署 Tomcat,避免从不可信来源获取二进制包;设置 JAVA_HOME、CATALINA_HOME 等环境变量,使用 Systemd 管理进程生命周期并设置合适的 JAVA_OPTS/CATALINA_OPTS(如堆大小、GC 策略、熵源等)。
  • 部署方式:优先使用 WAR 包部署,避免开发机上的明文源码直接暴露在服务器目录;上线前清理示例与临时文件,限制上传目录的可执行权限,禁止上传 .jsp 到可访问目录。
  • 访问控制:对外仅暴露必要的 Connector(HTTP/HTTPS),管理接口限制来源 IP 或禁用;启用访问日志并定期审计异常请求。

四 快速检查清单

检查项 期望状态/做法
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 与可疑路径访问

0