問題說明:HTTP協議的設計要求服務器在處理之前完全接收到請求。如果HTTP請求未完成,或者傳輸速率非常低,則服務器將保持其資源占用等待剩余的數據。如果服務器占用的資源太多,則會造成拒絕服務。
漏洞危害:一台機器可在對自身帶寬、無關服務和端口影響較小的情況下大量占用另一台機器的服務器資源,導致受害服務器拒絕服務。
解決方案:
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.如果使用了數據庫連接池,則設置適當的超時時間。例如:
< Context path="/eis_zsgl" docBase="eis_zsgl" defaultSessionTimeOut="3600"
debug="5" reloadable="true" crossContext="true">
< Resource name="jdbc/eis_zsgl" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="sa" password="eisunion"
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>