问题说明:HTTP协议的设计要求服务器在处理以前彻底接收到请求。若是HTTP请求未完成,或者传输速率很是低,则服务器将保持其资源占用等待剩余的数据。若是服务器占用的资源太多,则会形成拒绝服务。java
漏洞危害:一台机器可在对自身带宽、无关服务和端口影响较小的状况下大量占用另外一台机器的服务器资源,致使受害服务器拒绝服务。jquery
解决方案:web
1.修改配置文件server.xml,设置connectiontimeout值,默认为20000ms,修改成8000ms;
2.若是使用了jquery,设置ajax的请求超时时间。设置AJAX的全局timeout时间(默认为30000ms) $.ajaxSetup({timeout:8000});使用jQuery的$.ajaxSetup方法能够设置AJAX请求的默认参数选项,当程序中须要发起多个AJAX请求时,则不用再为每个请求配置请求的参数。须要注意的是用$.ajaxSetup函数所设置的默认值不会应用到load()命令上。对于实用工具函数,如$.get()和$.post(),其HTTP方法不会由于使用这些默认值而被覆盖。设置GET的默认类型不会致使$.post()使用HTTP的GET方法。
3.若是使用了数据库链接池,则设置适当的超时时间。例如:ajax
< Context path="/eis_zsgl" docBase="eis_zsgl" defaultSessionTimeOut="3600" sql
debug="5" reloadable="true" crossContext="true">数据库
< Resource name="jdbc/eis_zsgl" auth="Container" type="javax.sql.DataSource" 服务器
maxActive="100" maxIdle="30" maxWait="10000" cookie
username="sa" password="eisunion" session
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 函数
url="jdbc:sqlserver://127.0.0.1:1433;databasename=mytest"
validationQuery="select 1" />
< /Context>
defaultSessionTimeOut:设置会话时间 单位为秒
maxActive : 链接池的最大数据库链接数。设为0表示无限制。
maxIdle :能够同时闲置在链接池中的链接的最大数
maxWait : 最大超时时间,以毫秒计
4. 若是可能,在cookie里设置httponly参数。设置Tomcat / web.xml文件:
< session-timeout>30< session-timeout>
< secure>true< secure>
< http-only>true< http-only>
< /cookie-config>