关于本地Cookies和服务端的Session机制分析

今天看到Cookies里面有一串参数,__utma,__utmb,__utmc,__utmm,__utmv,然后查了下,这些是谷歌统计留下的Cookies信息。另外还有一个Jsession,几年前存在Cookies欺骗,用session保存在服务端安全,众所周知,Cookies是保存在客户端,客户端如果篡改了,服务端的验证也就失效了,故Cookies存在欺骗,Session虽然是在服务端,但是在客户端也不可能没有信息。为嘛没有人去破解呢,还有session跟cookies一样有有效期,会话注销后session可以也注销,如果会话注销后,session还是有效的,这样就离不开客户端了,是怎么实现的呢。晚上写代码研究下,还有session可以保存在服务器上,同样也可以保存在数据库中,保存到那里更安全一些呢?值得研究一下。

首先用php创建一个session,代码如下:

<?
ini_set('session.save_path', dirname(__FILE__).'/'); //设置保存到服务器根路径,默认session在win是保存到C:\windows\temp,lin//ux是保存到/usr/local/php/tmp/session/,可以在php.ini修改或者ini_set设置。
$username = $_GET['id'];
session_start();
$_SESSION[$user];

session原理
上图为查看PHPSESSION在cookies中的值。
 

在服务端有一个文件,sess_***********,后面的*******就是Cookies里面的PHPSESSION的值。
于是猜测每个会话在Cookies的PHPSESSION值,传到apache去,apache会以系统的方式到对应的目录去查找这个文件。文件保存的内容就是Session的值。这样如果客户端的Session被穷举了呢,Session只有登陆了才有,这个文件名像一个庞大的随机数,破解的可能性很小,Session的验证机制看大神们讨论与主机头请求,ip也有关系,不过都是可以绕过的。没有100分的安全,尽力做到99分就好了。
Session存到服务器安全呢,还是存到数据库安全呢,各有利弊,如果暴力破解了session名,如果服务器安全做的比较好的话,就放到服务器(存在任意文件下载漏洞就会导致安全问题了),如果防sql注入做的比较好的话就放到数据库(有sql注入漏洞就会导致安全问题了)。所以放到那里都没有100分的安全。
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.