随着互联网技术的飞速发展,业务的开展方式更加灵活,应用系统更加复杂,也因此面临着更多的安全性挑战。安全测试是在应用系统投产发布之前,验证应用系统的安全性并识别潜在安全缺陷的过程,目的是防范安全风险,满足保密性、完整性、可用性等要求。
日常测试过程中经常遇到开发同事来询问一些常见的配置型漏洞应该如何去修复,为了帮助开发同事快速识别并解决问题,通过总结项目的安全测试工作经验,笔者汇总、分析了应用系统的一些常见配置型漏洞并给出相应的修复建议,在这里给大家进行简单的分享。
一、Cookie缺少HttpOnly属性
漏洞描述
Cookie中的HttpOnly属性值规定了Cookie是否可以通过客户端脚本进行访问,能起到保护Cookie安全的作用,如果在Cookie中没有将HttpOnly属性设置为true,那么攻击者就可以通过程序(JS脚本、Applet等)窃取用户Cookie信息,增加攻击者的跨站脚本攻击威胁。窃取的Cookie中可能包含标识用户的敏感信息,如ASP.NET会话标识等,攻击者借助窃取的Cookie达到伪装用户身份或获取敏感信息的目的,进行跨站脚本攻击等。
修复建议
向所有会话Cookie中添加"HttpOnly"属性。
1)Java语言示例:
HTTPServletResponse response2 = (HttpServletResponse)response;
response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
2)C#语言示例:
HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
3)VB.NET语言示例:
Dim myCookie As HttpCookie = new HttpCookie("myCookie")
myCookie.HttpOnly = True
Response.AppendCookie(myCookie)
二、加密会话(SSL)Cookie缺少secure属性
漏洞描述
对于敏感业务,如登录、转账、支付等,需要使用HTTPS来保证传输安全性,如果会话Cookie缺少secure属性,Web应用程序通过SSL向服务器端发送不安全的Cookie,可能会导致发送到服务器的Cookie被非HTTPS页面获取,造成用户Cookie信息的泄露。如果启用了secure属性,浏览器将仅在HTTPS请求中向服务端发送cookie内容。
修复建议
向所有敏感的Cookie添加"secure"属性。
1)服务器配置为HTTPS SSL方式;
2)Servlet 3.0环境下对web.xml文件进行如下配置:
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
3)ASP.NET中对Web.config进行如下配置:
<httpCookies requireSSL="true" />
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 ]]]]]] )
在weblogic中进行如下配置:
<wls:session-descriptor>
<wls:cookie-secure>true</wls:cookie-secure>
<wls:cookie-http-only>true</wls:cookie-http-only>
</wls:session-descriptor>
三、缺少"Content-Security-Policy"头
漏洞描述
因Web应用程序编程或配置不安全,导致HTTP响应缺少"Content-Security-Policy"头,可能产生跨站脚本攻击等隐患,可能会收集有关Web应用程序的敏感信息,如用户名、密码、卡号或敏感文件位置等。