会话管理设计漏洞
隐患:由于应用程序设计不当,攻击者窃取到密码、密钥、session tokens等信息
风险:攻击者可以利用会话管理漏洞窃取到密码、会话令牌等信息,进而冒充合法用户身份,获取敏感信息或者进行恶意操作。
http://example/<script> document.cookie=”sessionid=1234;%20domian=.example.dom”;</script>
http://example/<meta%20htp-equiv=Set-Cookie%20content=”sessionid=1234;%20domian=.example.dom”>
措施1 用户成功认证登录后,始终生成新的会话
request.getSession().invalidate(); //清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
措施2 对于Cookie重要信息加密
Cookie cookie = new Cookie(“emailCookie”,email);
cookie.setSecure(true);
response.addCookie(cookie);
不安全的直接对象引用漏洞
隐患:应用程序没有检查用户是否具备访问系统的资源,就直接进行调用
风险:攻击者利用该漏洞可以访问未经授权的其他用户的资料,系统文件等信息。
恶意代码示例:
一网站的新闻检索功能可搜索指定日期的新闻,但其返回的URL包含了指定日期新闻页面的文件名
http://example.com/online/getnews.asp?item=20March2003.html
攻击者可以尝试不同的目录层次来获得系统文件win.ini:
http://example.com/online/getnews.asp?item=.../.../winnt/win.ini
措施1 使用间接对象引用。避免在URL或网页中直接引用内部文件名或数据库关键字,应使用自定义的映射名称来取代直接对象名,防止将重要内容的关键字和文件名泄露给用户。
http://example.com/down.jsp?filed=234
int filed =Integer.parseInt(request.getParameter(“filed”));
String filename = null;
if(filed ==234){
filename = “example.txt”;
}
措施2 检查用户访问权限。来自不受信源所使用的所有直接对象引用都必须包含访问控制检测,才能确保用户对要求的对象有访问权限。
int cartID = Integer.parseInt(request.getParameter(“cartID”));
User user = (User)request.getSession().getAttribute(“user”);
String query = “ select * from table WHERE cartID =’”+ cartID +”’AND userID=’”+user.getID() + “’”;
安全配置漏洞
由于操作系统、应用服务器、数据库服务器、应用程序、中间件以及相关相关应用程序所使用的框架的不安全配置,造成恶意用户可以利用系统默认账户、默认配置页面(如已发现的操作系统、Web服务器、数据库服务器、中间件漏洞的默认配置页面),对应用系统进行攻击。
风险:
攻击者利用该漏洞可以获取系统敏感信息,如程序路径、配置信息等,或者通过默认账户登录系统,获取系统机密信息,甚至操作整个服务器。
措施1
自定义出错页面,统一错误页面提示。
措施2
避免使用默认路径;修改默认账户和密码;禁用预设账户。
措施3
定期进行安全加固,及时安装补丁。