近期 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作设置。所以这里没有使用。