3

在 PHP Web 应用程序中,我使用会话 ID 作为文件名。在某个时刻,这些文件被删除,代码如下

unlink('tmp/'.session_id());

我知道用户可以更改他/她的会话 ID。因此我想知道会话ID是否可以更改为“/../../etc/passwd”之类的东西。

我现在的问题是,如果这种“黑客攻击”是可能的,以及如何最好地保护我的代码。

提前感谢您的回答!

评论:我知道用户劫持其他用户会话的危险和预防方法,目前这不是我的问题。

4

2 回答 2

5

除非您的设置非常糟糕,否则用户将永远无法直接更改他的会话 ID,因为这不应该是直接参数 - 它应该用于验证它是否存在,但永远不要创建基于任意会话的在那个名字上。

但是,如果您的系统不是这种情况,建议对以下内容进行清理:preg_replace("#([^0-9a-f]+)#i","",session_id());

于 2013-05-24T20:30:37.100 回答
0

您可以使用 Regex 替换所有坏字符:

$sess = session_id();
$clean_sess = preg_replace("/[^a-zA-Z0-9]/Uis", "", $sess);
unlink('tmp/'.$clean_sess);
于 2013-05-24T20:31:32.697 回答