请找出下面程序漏洞,并分析其理由.
PHP代码如下:
解答如下:
把代码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.欺骗成功!
1.如果是php.ini配置问题造成的,应该不能叫安全问题.配置安全和代码安全应该分开看.因配置是基础
2.如果是怕被程序截获.....http协议本身就不是持续连接的
要保存会话一定要暴露给客户端的.不管你怎么做被截获的危险总是存在.
怕截获,干脆用https协议了,相对安全多了.
其他的?还真没有看出来.谁看出来了指点一下.
网友leerais的看法
echo 出来的为重设后的session_id,实际上不为这个值。
<?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的话,也会出许多问题的.
原因就是当其值为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,实际上不为这个值。
转载于:https://blog.51cto.com/ud1121/189079