Web应用安全测试-防护功能缺失
1、Cookie属性问题
漏洞描述:
Cookie属性缺乏相关的安全属性,如Secure属性、HttpOnly属性、Domain属性、Path属性、Expires属性等。
测试方法:
- 通过用web扫描工具进行对网站的扫描,如果存在相关cookies的安全性问题,则一般工具都会检测出来,误报率小。
- 或在浏览器调试窗口的网络请求处查看HTTP Header,判断是否设置Cookie属性。
风险分析:
cookie的属性设置不当可能会造成系统用户安全隐患,Cookie信息泄露是Cookie http only配置缺陷引起的,在设置Cookie时,可以设置的一个属性,如果Cookie没有设置这个属性,该Cookie值可以被页面脚本读取。 例如:当攻击者发现一个XSS漏洞时,通常会写一段页面脚本,窃取用户的Cookie,如果未设置http only属性,则可能导致用户Cookie信息泄露,攻击者能够利用该用户的身份进行系统资源访问及操作。如图是设置了cookies属性和没有设置属性,被XSS跨站截获的cookies对比:
设置了httponly属性:
未设置httponly属性:
风险等级:
【低危】:存在未设置 HttpOnly 或 Secure 属性;Domain 或者 Path 设置路径不合理。
修复方案:如果网站基于cookie而非服务器端的验证,建议设置Cookie的一些安全属性,jsp参考代码如下:
response.setHeader("SET-COOKIE",
"user=" + request.getParameter("cookie") + "; HttpOnly");
PHP中的设置如下:
PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中设置session.cookie_httponly,设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
<?php ini_set("session.cookie_httponly", 1);
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); |
对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来设置:
<?php header("Set-Cookie: hidden=value; httpOnly"); ?> |
注意事项:暂无
2、会话重用
漏洞描述:用户退出系统后,服务器端Session未失效,攻击者可利用此Session向服务器继续发送服务请求。
测试方法:通过客户端提供的注销功能退出客户端登录,利用登录时的会话再次向服务器发出操作请求,判断服务器是否返回操作结果。
风险分析:攻击者通过网络嗅探或者钓鱼攻击窃取用户的Session信息,在用户注销系统后,如服务器端未直接清理此Session,则攻击者仍可利用窃取到的Session成功访问系统直到Session过期。
风险等级:
【高危】:关闭浏览器后或退出后返回之前页面会话依然有效
修复方案:用户退出系统后,服务器端应清空此用户的Session信息。
注意事项:暂无
3、会话失效时间过长
漏洞描述:应用系统的会话失效时间过长。导致服务器性能受损,且由于过长的失效时间会导致可以被多次利用。
测试方法:登录目标系统获得会话,几个小时之后再次利用该会话操作目标系统,测试会话是否失效。
风险分析:实施会话保持攻击的前提是攻击者已通过网络中间人攻击窃取用户的SessionID,并能修改用户的Cookie的Expire时间为长久有效,用户不退出系统的前提下,攻击者可长时间利用用户的SessionID登录系统。
风险等级:
【低危】:公网系统会话失效时间超过 30 分钟
修复方案:
- 服务器端设置Session的存活时间,超过存活时间强制销毁Session;
- 当客户端发生变化时(比如IP、UserAgent等信息),要求用户重新登录;
- 限制每个用户只允许拥有一个有效Session,当用户再次登录时,攻击者所保持的Session便会失效。
注意事项:暂无