空空叶博客 学习与开发博客

tomcat优化

2017-05-05
web

tomcat优化

开启Gzip压缩

原因

压缩文件,减少流量,提高传输速度

解决

在Tomcat服务器目录下的conf/server.xml里找到:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useSendfile="false"/>

添加以下属性:

compression="force"   
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"   
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

注: 其中2048单位为B

服务器重启后,会话(HttpSession)出异常.

原因

Tomcat服务器停止后会保存Session,重启后恢复,如果session中有无法序列化的类,就会出错.

解决

禁止Tomcat服务器停止后保存Session,在Tomcat服务器目录下的conf/context.xml里的<context></context>之间添加:

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
    <Store className="org.apache.catalina.session.FileStore"/>
</Manager>

服务器网站禁止使用IP直接访问

原因

  • 若公布于外网的服务器IP地址未备案,就有可能被工信部查封。这样备案的域名也会无法访问。
  • 如果AppScan通过ip访问扫描,会有“发现内部ip泄露模式”的低级别的警告
  • 可能会收集有关Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置

解决

只允许网站使用一个域名访问(www.minecraft001.com),不能使用其它域名或IP访问.

1.将Tomcat服务器目录下的conf/server.xml里的<Engine></Engine>defaultHost设置为other

2.在<Engine></Engine>之间添加:

<Host name="other" appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Context path="/" reloadable="true" docBase="G:/ServerWeb_Other"/>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="other_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  </Host>

同时在G盘内增加项目ServerWeb_Other(查看主页的附件),此项目会将访问重定向到主域名(www.minecraft001.com)

这样,如果通过任何其它方式访问域名,就会被自动重定向到指定的域名上.

另一个(原来的)Host为:

<Host name="www.minecraft001.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Context path="/" reloadable="true" docBase="G:/ServerWeb"/>
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

XSRF保护

XSRF(Cross Site Request Forgery)

原因

  • 通过伪装来自受信任用户的请求来利用受信任的网站

解决

  • 对于会话(HttpSession)的第一次请求,在返回里添加Cookie: XSRF-TOKEN,并设置Cookie路径为根路径
  • 对于会话的非第一次请求,则判断请求Cookie里的XSRF-TOKEN值是否与会话属性里保存的XSRF_TOKEN值相同,不同则返回异常

说明

  • 第一次请求由会话的XSRF_TOKEN属性来判断,未设置此属性为第一次请求,否则为非第一次请求
  • 对于第一次请求,不一定必然在返回里添加Cookie,如果uri为非根路径,则不添加Cookie,否则可能会导致其它路径里Cookie的XSRF-TOKEN值不同而出错
  • XSRF攻击比较少,前提是有针对此网站的恶意网站,并且用户访问了那个恶意网站,恶意网站便可伪装成用户进行操作.(虽然如此,但仍然是可以防护的,因此适合添加上.)

jsonp安全-referer检测问题

介绍

jsonp调用时,有时需要判断调用来源来确保安全,一般使用referer来判断,但有如下的问题.

原因

  • 正则过滤不严谨,如只过滤是否存在qq.com,则攻击者可以用attack.com?qq.com此类的方法来绕过
  • 空referer,一般情况下浏览器直接访问URL是不带Referer的,所以很多防御部署允许空Referer,但在跨协议调用js时,referer是空的,因此可以绕过referer来攻击

解决

  • 采用严谨的正则匹配
  • 禁止空referer
  • 采用referer与token结合的方式进行检测

项目更新重启后文件仍然是旧的

原因

  • tomcat目录内有个work文件夹,此文件夹相当于项目运行时的缓存

解决

  • 项目更新后,删除work文件夹再重启
  • 项目更新后,最好同时也删除tomcat目录内的logs文件夹再重启,减少日志混杂.(如果有需要,可以先备份日志再删除)

相同的静态文件重复加载

原因

  • 因为相同的静态文件在多个网站间重复存在

解决

  • 对于公共的静态文件(js,css),首先尽量使用第三方静态文件网站,其次放置到同一个域名上

AES加密出错

原因

  • 默认JAVA仅支持128位密钥,使用256位密钥的时候,会报告密钥长度错误

解决

下载一个支持更长密钥的包。这个包叫做 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

下载地址

下载解压后得到两个包:local_policy.jar,US_export_policy.jar,将 JRE 环境中lib\lib\security中的同名包替换掉。


上一篇 syn flood

下一篇 web笔记

目录