在PHP Web应用程序中,我使用会话ID作为文件名。在某个时刻,这些文件将被删除,代码如
unlink('tmp/'.session_id());
我知道用户可以更改他/她的会话ID。因此,我想知道会话ID是否可以更改为“/../../etc/passwd”。
现在我的问题是,如果可能出现这种“黑客攻击”,以及如何最好地保护我的代码。
提前感谢您的回答!
评论:我了解用户劫持其他用户会话的危险和预防方法,目前我的情况不是问题。
答案 0 :(得分:5)
除非你有一个非常搞砸的设置,否则用户永远无法直接更改他的会话ID,因为这永远不应该是一个直接的参数 - 它应该被用来验证它是否存在,但永远不会根据该名称创建任意会话。
但是,如果您的系统不是这种情况,建议您进行清理:preg_replace("#([^0-9a-f]+)#i","",session_id());
答案 1 :(得分:0)
您可以使用正则表达式替换所有不良字符:
$sess = session_id();
$clean_sess = preg_replace("/[^a-zA-Z0-9]/Uis", "", $sess);
unlink('tmp/'.$clean_sess);