Web应用基于HTTP协议实现的,但是,HTTP协议是无状态的【参考RFC2616?section 5】,也就是说如果纯粹基于HTTP协议来实现一个应用,前后请求的消息就需要一个能够保持登录状态的东东,这个东东就是会话【session】。由于HTTP是无状态,所以这个会话的管理是通过Cookie来实现的,通常通过Cookie来管理的有标示会话的ID和用户登录之后获得的Token。
由于会话ID或者Token表示一个人已经登录而且可以根据自己的权限在网站内畅游,所以,他也就成了攻击者的目标。以前,出现过的会话ID可预测、URL中的会话ID问题等问题,在最近的一些web服务器组件中已经基本上消除了。所以,想通过预测会话ID或者在URL中添加一个会话ID参数来劫持会话,已经不太可能了。 不过,会话管理也需要注意,否则,也会出安全问题。
第一、就是Cookie的设置,Cookie中含有特别重要的信息,为了保护Cookie的安全HTTP也添加了很多保护措施,例如:添加了secure和httponly属性等,关于Cookie的安全需要关注一下几个属性,
属性名 | 作用 | secure | 对于敏感信息,原则上不建议保存在cookie中的,但是,特殊情况下,必须放在cookie中,则使用该选项可以加密cookie的内容。不过,加密也只是在传输的过程中加密,保存在本地的cookie文件还是不加密的。 【Httponly And Secure_jimmyleeee的博客-CSDN博客】 | httponly | 一般的cookie对象,都可以通过document对象获得,从而可以在javascript中操作。为了保护cookie,现在浏览器在设置Cookie的时候一般都接受一个叫做HttpOnly的参数,一旦这个HttpOnly被设置,你在浏览器的document对象中就得不到Cookie对象了,也就看不到其中的信息。而浏览器在浏览的时候不会受到任何影响,因为Cookie会被浏览器发出去。 【Httponly And Secure_jimmyleeee的博客-CSDN博客】 | domain | domain就表示Cookie所支持的域名,一个网站可能会有多个域名,一般建议尽量设置小一些。例如:a.test.com域名的网站设置Cookie时,如果设置为*.test.com,就会导致b.test.com域名的请求也会带上a.test.com的Cookie。 | Path | Path就表示Cookie所支持的路径,一个网站可能会有多个路径代表不同的因公时,一般建议尽量设置小一些。例如:www.test.com/a域名的网站设置Cookie时,如果设置为/时,就会导致www.test.com/b的请求也会带上www.test.com/a的Cookie。 | Expire | 如果设置这个过期时间,预示着Cookie是persistent cookies,Cookie在过期时间之后才会无效。一般建议不设置时间,只是用session cookie。 |
Cookie中的会话ID带来的另外一个问题就是泄露服务器组件的信息,例如:PHPSESSID、JSESSIONID、CFTOKEN和ASP.NET_SessionId,通过会话ID的信息就可以知道后台是用什么技术包括:是用什么语言。因此,建议在配置重新设置会话ID的名字。
第二,就是会话的有效性管理
????????一般一个页面在一定时间范围内如果没有任何操作,说明这个会话已经闲置太久,就可以考虑将此会话彻底清理掉,否则,会一直占用服务器资源,同时,也会增加会话被劫持的风险。
????????当一个用户在客户端点击【登出】时,表明这个会话已经不需要了。在渗透的过程中,还经常遇到一些会话登出之后,使用原来会话的Cookie依然可以进行操作,说明此会话没有被彻底登出。
????????例如,PHP语言登出时,要销毁会话,并且清除绘画中的信息:
if(isset($_GET['logout'])) {
session_destroy();
unset($_SESSION['username']);
}
????????Java语言需要调用session的invalidate才能彻底清除会话:
session.invalidate();
可能有的系统是通过Token来表示用户是否登录的,没有在会话中设置任何信息,只要有Token就认为是登录的。那么,这种情况也需要考虑在用户登出之后,把Token设置无效。
第三,为了保证Cookie信息的安全,不仅要在本地注意安全,也需要在传输过程中保证Cookie信息的安全,关于传输安全需要设置好:HSTS【应用安全系列之二十:HTTP协议安全_jimmyleeee的博客-CSDN博客】,同时也需要注意配置好Web服务器支持的协议的版本和安全协议支持的加密算法集,经常有些网站,在安全协议和安全加密套件的配置上不注意,是的网站支持了不安全的加密协议和加密套件,如下图,网站还配置使用了TLS1.0:
第四、需要注意的是XSS问题,当网站有XSS【应用安全系列之二:XSS_jimmyleeee的博客-CSDN博客】和CSRF【应用安全系列之十九:CSRF_jimmyleeee的博客-CSDN博客】等问题时,攻击者可以通过XSS获取会话的信息,然后,劫持会话;可以通过CSRF问题让用户在不知情的情况下,诱使用户点击,触发一些伪造的恶意的请求。
? ? ?随着web服务器中间件的更新换代,虽然很多关于会话管理的问题都已经在设计上避免了,但是,由会话造成的攻击依然很多,必须在服务器配置、安全协议的设置以及应用系统自身的防护上加强会话的保护。
|