Appscan漏洞 之 加密会话(SSL)Cookie 中缺少 Secure 属性

  近期 Appscan扫描出漏洞 加密会话(SSL)Cookie 中缺少 Secure 属性,已做修复,现进行总结如下:

1.1、攻击原理

  任何以明文形式发送到服务器的 cookie、会话令牌或用户凭证之类的信息都可能被窃取,并在稍后用于身份盗窃或用户伪装,此外,若干隐私法规指出,用户凭证之类的敏感信息要始终以加密的方式发送到 Web 站点。

1.2、修复建议

  给cookie添加secure属性

1.3、修复代码示例

  1)服务器配置为HTTPS SSL方式

  2)Servlet 3.0 (Java EE 6)的web.xml 进行如下配置:

  <session-config>
   <cookie-config>
    <secure>true</secure>
   </cookie-config>
  </session-config>

  3)ASP.NET的Web.config中进行如下配置:

   <httpCookies requireSSL="true" />

  4)php.ini中进行如下配置

  session.cookie_secure = True

  或者

  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中进行如下配置:

  <wls:session-descriptor> 
      <wls:cookie-secure>true</wls:cookie-secure>
       <wls:cookie-http-only>true</wls:cookie-http-only>
   </wls:session-descriptor>

1.4、其它资料

  https://www.owasp.org/index.php/SecureFlag

1.5、实际修复方案

  方案一:项目使用的是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做设置。因此这里没有使用。

上一篇:JavaScript封装的几种方式


下一篇:【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜