入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP安全编程之session固定获取合法会话

创建时间:2016-08-10 投稿人: 浏览次数:688

关于会话,需要关注的主要问题是会话标识的保密性问题。如果它是保密的,就不会存在会话劫持的风险了。通过一个合法的会话标识,一个攻击者可以非常成功地冒充成为你的某一个用户。

一个攻击者可以通过三种方法来取得合法的会话标识:

  • 猜测
  • 捕获
  • 固定

PHP生成的是随机性很强的会话标识,所以被猜测的风险是不存在的。常见的是通过捕获网络通信数据以得到会话标识。为了避免会话标识被捕获的风险,可以使用SSL,同时还要对浏览器漏洞及时修补。

要记住浏览器会根据请求中的Set-cookie头部中的要求对之后所有的请求中都包含一个相应的Cookie头部。最常见的是,会话标识会无谓的在对一些嵌入资源如图片的请求中被暴露。例如,请求一个包含10个图片的网页时,浏览器会发出11个带有会话标识的请求,但只有一个是有必要带有标识的。为了防止这种无谓的暴露,你可以考虑把所有的嵌入资源放在有另外一个域名的服务器上。

会话固定是一种诱骗受害者使用攻击者指定的会话标识的攻击手段。这是攻击者获取合法会话标识的最简单的方法。在这个最简单的例子中,使用了一个链接进行会话固定攻击:

<a href="http://example.org/index.php?PHPSESSID=1234">Click Here</a>

另外一个方法是使用一个协议级别的转向语句:

1 <?php
2   
3   header("Location: http://example.org/index.php?PHPSESSID=1234");
4   
5 ?>

这也可以通过Refresh头部来进行,产生该头部的方法是通过真正的HTTP头部或meta标签的http-equiv属性指定。攻击者的目标是让用户访问包含有攻击者指定的会话标识的URL。这是一个基本的攻击的第一步,完整的攻击过程见图:

使用攻击者指定的会话标识进行的会话固定攻击

如果成功了,攻击者就能绕过抓取或猜测合法会话标识的需要,这就使发起更多和更危险的攻击成为可能。为了更好地使你理解这一步骤,最好的办法是你自己尝试一下。首先建立一个名为fixation.php的脚本:

1 <?php
2   
3   session_start();
4   $_SESSION["username"] = "chris";
5   
6 ?>

确认你没有保存着任何当前服务器的cookies,或通过清除所有的cookies以确保这一点。通过包含PHPSESSID的URL访问fixation.php:

http://example.org/fixation.php?PHPSESSID=1234

它建立了一个值为chris的会话变量username。在检查会话存储区后发现1234成为了该数据的会话标识:

1 $ cat /tmp/sess_1234
2 username|s:5:"chris";

建立第二段脚本test.php,它在$_SESSION["username"]存在的情况下即输入出该值:

01
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。