1、Cookie的安全防範:
- 存儲於cookie中的敏感數據必須加密。
- 沒有特殊要求下,儘量使用會話cookie(非持久化)。
- 如果使用持久化cookie應該設置cookie超時。
- 激活cookie安全傳輸,表示創建的 cookie 只能在https連接中被瀏覽器傳遞到服務器端進行會話驗證,如果是http連接則不會傳遞該信息。
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
if (…) {
// 設置cookie不持久化到客戶端磁盤上
cookie.setMaxAge(-1);
// 設置cookie超時, 120秒
cookie.setMaxAge(120);
// 激活cookie安全傳輸
cookie.setSecure(true);
response.addCookie(cookie);
}
}
2、必須設置session的超時時間。
web.xml中配置示例:
<session-config>
<session-timeout>10</session-timeout>
</session-config>
3、必須構建統一的錯誤處理頁面。
web.xml示例:
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
4、多線程中線程安全的防範:
- 儘量少用靜態(static)變量和static方法。(除了靜態常量:static final constants)。
- 儘量多線程框架(java.util.concurrent)構建多線程同步機制。
- 使用ThreadLocal避免多個線程之間類成員的共享衝突。
- 如非必要,不要使用synchronized關鍵字。必須要使用synchronized時,應將同步範圍最小化,即將同步作用到最需要的地方,避免大塊的同步塊或方法等。
5、增加Referer的檢查,防止非法訪問。
Referer是HTTP Header中的一個字段,當瀏覽器想服務器發送請求時,Referer用來通知服務器請求發起的位置。