使用Tomcat时应该注意的安全策略
1. 删除默认应用
新部署的Tomcat,在webapps目录中有几个工程,包含了示例、管理等功能,这些绝大部分都用不到且有风险,应该删除。
rm -rf apache-tomcat/webapps/*
2. 默认用户管理
若不想通过web的方式部署应用,建议注释或者删除tomcat-users.xml下用户权限相关配置。
<tomcat-users>
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
</tomcat-users>
高版本的Tomcat默认已经将此注释
3. 隐藏混淆版本信息
使用Tomcat时,若不使用nginx等反向代理,则会在消息头或者异常的页面直接暴露web服务器的名称及其版本号,这样攻击者可以有针对性的进行攻击。
修改$CATALINA_HOME/conf/server.xml,在Connector节点添加server字段,如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" server="KBS1.1"/>
4. 关闭自动部署
自动部署即将war包放在已经启动中的Tomcat时,自动解压缩和进行热部署。若不需要此功能则建议关闭。修改$CATALINA_HOME/conf/server.xml中的host字段,修改unpackWARs=”false” autoDeploy=”false”。
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
5. 自定义错误页面
部署在Tomcat中的应用,在未定义404或者500等错误页面时,会抛出异常页面,异常页面会暴露出应用的路径及服务区版本等信息。所以通常需要在web.xml中配置异常页面。
<error-page>
<error-code>404</error-code>
<location>404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page>
6. 关闭AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。前端如果是由nginx做的反向代理的话可以不使用此连接器,因此需要注销掉该连接器。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
7. 服务权限控制
tomcat以非root权限启动,应用部署目录权限和tomcat服务启动用户分离,比如tomcat以tomcat用户启动,而部署应用的目录设置为nobody用户750。
8. cookie安全控制
HttpOnly属性:如果在Cookie中设置了”HttpOnly”属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
编辑$CATALINA_HOME/conf/context.xml文件,在Context节点中增加属性useHttpOnly=”true”。
<Context useHttpOnly="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
secure属性:当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
配置cookie的secure属性,在web.xml中sesion-config节点配置cooker-config,此配置只允许cookie在加密方式下传输。
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2017/04/tomcat-security/