session劫持

session介绍

因为HTTP通信使用许多不同的TCP连接,Web服务器需要一个方法来识别每个用户的连接。最有用的方法是当一个客户端成功认证后,该Web服务器向该客户端浏览器发送令牌。Session令牌通常由可变长度的字符串组成,并且它可以以不同的方式存储,如在URL中,在HTTP请求的cookie报头中(request header),或在HTTP请求中的其它报头中,或者在HTTP请求的主体中。

登录

  1. 客户端发送登录请求

  2. 服务器接收请求,验证登录,成功后为此web用户开辟一个私密空间,存放登录信息

  3. 服务器为这个私密空间编号,类似于PHPSESSID=rcmjnke6er5pnvf3qof0lclca7这样的一个键值对,不同的语言生成的键名和值的规则不同,但是都本着两个原则:第一,value必须唯一,毕竟一个站点可能同时有数百万甚至更多用户在访问,不能让两个用户的表示一样;第二:生成的value必须是不可推测的,否则别有用心用户就可以根据自己的表示信息推断出别人的,然后伪造别人登录信息访问站点(这正是session劫持)。

  4. 服务器把这个键值对写入http响应中传给客户端

  5. 客户端接收响应,关闭连接

登录成功,用户访问其他页面

  1. 客户端发送登录请求(服务器写到cookie中的用户标识信息也被发送)

  2. 服务器读取http请求中的cookie信息,根据标识信息查找对应私密空间,读取用户信息

  3. 服务器生成特定响应,发送给客户端

  4. 客户端接收响应,关闭连接

session劫持

session劫持攻击通过窃取或预测有效的Session令牌来获得未经授权Web服务器访问权限。

Session 代理人劫持

在下面这个例子中,我们可以看到,第一个攻击者使用代理来捕捉一个有效的session令牌称为“SessionID”,然后他使用该有效session令牌获得未经授权的Web服务器访问权限。

session劫持_第1张图片

跨站点脚本攻击

攻击者可以通过在客户端上运行恶意代码来获取Session令牌。这个例子说明了如何攻击者可以利用XSS攻击窃取session令牌。如果攻击者发送恶意的JavaScript代码到受害人访问网站中或当受害者点击链接时,JavaScript将运行攻击者的注入脚本。如图中所示,它可以显示当前Sessioncookie的值;使用相同的技术则可能将此Session发送给攻击者。


session劫持_第2张图片

防范session劫持

  1. 过滤用户输入,防止XSS漏洞

  2. 设置sessionId的cookie为HttpOnly,使客户端无法获取

  3. 使用https协议

你可能感兴趣的:(session劫持)