近期 Appscan掃描出漏洞 加密會話(SSL)Cookie 中缺乏 Secure 屬性,已作修復,現進行總結以下:
1.一、攻擊原理
任何以明文形式發送到服務器的 cookie、會話令牌或用戶憑證之類的信息均可能被竊取,並在稍後用於身份盜竊或用戶假裝,此外,若干隱私法規指出,用戶憑證之類的敏感信息要始終以加密的方式發送到 Web 站點。php
1.二、修復建議
給cookie添加secure屬性web
1.三、修復代碼示例
1)服務器配置爲HTTPS SSL方式服務器
2)Servlet 3.0 (Java EE 6)的web.xml 進行以下配置:cookie
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
3)ASP.NET的Web.config中進行以下配置:session
<httpCookies requireSSL="true" />
4)php.ini中進行以下配置dom
session.cookie_secure = True
或者ui
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain
[, bool $secure= false [, bool $httponly= false ]]]] )
或者加密
bool setcookie ( string $name [, string $value [, int $expire= 0 [, string $path
[, string $domain [, bool $secure= false [, bool $httponly= false ]]]]]] )
5)weblogic中進行以下配置:url
<wls:session-descriptor>
<wls:cookie-secure>true</wls:cookie-secure>
<wls:cookie-http-only>true</wls:cookie-http-only>
</wls:session-descriptor>
1.四、其它資料
https://www.owasp.org/index.php/SecureFlagspa
1.五、實際修復方案
方案一:項目使用的是WebShpere服務器,這個能夠在服務器中進行設置:
其實這種修復方式和5.2修復建議2)給web.xml加配置的方式是同樣的。這兩種修復方式都是必定能夠經過Appscan掃描的,只不過19環境須要支持https和http兩種協議,以上兩種方案的話,會致使http協議下的Cookie不能傳輸,從而致使http協議下的部分功能不能使用。如今暫時是以犧牲http協議下的功能不使用爲代價以這種方案經過掃描的。
方案二:
若是給Cookie配置了secure屬性,那麼這個Cookie能在https協議中傳輸,可是不能在http協議中傳輸。而實際系統應用中要支持兩種協議,這裏能夠經過request.getScheme()獲取是哪一種協議(這種方式https協議獲取的也是http,奇怪,能夠經過下面的方式判斷是不是https協議)
String url = req.getHeader("Referer");
if(url.startsWith("https")){}
而後進行判斷是否加這個屬性:cookie.setSecure(true)。
而這種方案的話,只能對後期本身代碼響應的Cookie作設置,而不能對容器自動響應的Cookie作設置。所以這裏沒有使用。