请找出下面程序漏洞,并分析其理由.
 
PHP代码如下:

<?php
session_start
();
$session_id session_id
();
echo 
"<p>你的session值为[$session_id].</p>"
;
?>


解答如下:

把代码COPY到你的运行环境

http://192.168.1.121/test.php
1.运行
你可以看到你的SESSION ID值
2.清空你所有cookies.然后你可以试编写一个session id
3.因为当函数session_start()运行时,php会检查是否有session id是否已写进cookie
4.如果没有,它会自动把值传给URL
see: http://192.168.1.8/test.php?PHPSESSID=1234
5.欺骗成功!
 
网友FormulaOne的分析
 
配置:session.use_cookies
原因就是当其值为0时session不使用cookie记录session_id而只用url方式传递session_id值,所以只能用form表单或url来传递id
当其值为1时,session使用sookie来记录session_id,所以只要网页不关闭,而且保证每页开始都有session start(),那么整个网站的每个页都会用这个cookie记录的这个唯一的session_id来对这个session文件进行读写~~~
如果浏览器不支持cookie的话使用session还是有很多麻烦的地方的~~~我们如果太多的使用session的话,也会出许多问题的.
 
网友yepiaobo的意见 (仅个人见解)
 
session存在不安全因素,因为只要启用了session,在客户端请求时,服务端会将session_id发送到客户端写入COOKIE,所以session_id有被拦截盗用的风险,最好的方法是用数据库来实现session
网友achun.shx也对此问题发表了自己的看法

1.如果是php.ini配置问题造成的,应该不能叫安全问题.配置安全和代码安全应该分开看.因配置是基础
2.如果是怕被程序截获.....http协议本身就不是持续连接的
要保存会话一定要暴露给客户端的.不管你怎么做被截获的危险总是存在.
怕截获,干脆用https协议了,相对安全多了.
其他的?还真没有看出来.谁看出来了指点一下.
 

网友leerais的看法
[复制PHP代码]
PHP代码如下:
If  id is specified it will replace the current session id session_id ()  needs to be called before session_start () for  that purpose .

echo 出来的为重设后的session_id,实际上不为这个值。