【发布时间】:2016-12-15 00:18:10
【问题描述】:
我已经看到,如果我将其分配给session_id(sid),我可以更改浏览器并继续保留存储在会话中的信息。
我已经准备了以下脚本,它可以正常工作以保持我想要的 sid 会话。
<?php
echo(session_id());
if ((isset($_GET['sid'])) && ($_GET['sid'] != session_id())) {
session_destroy();
session_id($_GET['sid']);
session_start();
}
echo('<br/>' . session_id());
?>
<pre><?= print_r($_SESSION); ?></pre>
<pre><?= print_r($_COOKIE); ?></pre>
可能的问题和解决方案:
- 问题 01: 在 $_GET['sid'] 中使用的任何字符串最终都会生成会话,因此会生成 C:/PHPSSID/sess_xxxxx 中的文件。有人可以生成一个循环并用内容填充服务器。
解决方案: 是否可以检查 sid 是否存在? 如果会话存在,则使用它,否则什么也不做。 但是我还没有找到任何类似于 session_id_exists 的函数。 我认为唯一的可能性是手动检查文件是否存在。还有其他解决方案吗?
- 问题02: 除了上一个问题。是否还有更多安全漏洞? 某人很容易从另一个用户生成现有的 sid 吗?我认为它会生成 26 位数字。
【问题讨论】:
-
解决方案php.net/manual/en/… ?
-
这似乎一点也不安全。你想解决哪个问题?
-
好吧,如果您的网站不是 https,如果您可以读取用户的引荐来源网址(即:通过在您的网站上发布攻击者控制的图像),您可以劫持会话
标签: php session session-cookies