問題說明: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>