0
我正在使用uploadify,并且脚本(使用adobe flash)会在请求上传操作url时创建新会话,而不是使用当前会话。为了解决这个问题,我需要提前通过会话ID。如何确保通过并设置会话ID?
有没有办法做到这一点,而不允许会话固定(劫持)?
以下是问题的一些细节: Sessions and uploadify
谢谢!
我正在使用uploadify,并且脚本(使用adobe flash)会在请求上传操作url时创建新会话,而不是使用当前会话。为了解决这个问题,我需要提前通过会话ID。如何确保通过并设置会话ID?
有没有办法做到这一点,而不允许会话固定(劫持)?
以下是问题的一些细节: Sessions and uploadify
谢谢!
在脚本创建一个临时载会话(未经测试,但你得到的点大约能有几个不同的会话):
<?php
//normal session
session_start();
//store sessionid for retrieval
$oldsessionid = session_id();
if($_SESSION['logged_in']){ //or however you check for a valid user
//stop old/normal session
session_write_close();
//create a new sessionname
$oldname = session_name('UPLOADSESSION');
//create a new id (fixed here, you might want a random number/char combo:
session_id('myuploadsessionid');
//start the session
session_start();
$_SESSION['upload'] = true;
$uploadid = session_id();
//now you can use `'data: "artist="+$fi+"&UPLOADSESSION="'.$uploadid` in uploadify
session_write_close();
}
//return to normal name
session_name($oldname);
//set old session id
session_id($oldsessionid);
//resume normal session
session_start();
因此,在您接收脚本:
<?php
session_name('UPLOADSESSION');
session_id($_POST['UPLOADSESSION']);
session_start();
if(isset($_SESSION['upload']) && $_SESSION['upload']){
//accept files
//invalidate session after this upload
$_SESSION['upload'] = false;
}
用户仍然有2个cookie,可能上传的是UPLOADSESSION,但是您不会将其用于其他任何上传,并且仅用于1次上传(尽管您可能希望允许更多)。
或者,您可以在上传后在第一个请求上调用session_regenerate_id();
(只需在上传时在$_SESSION
上设置标志)。
在这里,用户仍然可以看到会话ID,但仅用于上传操作,对吗?我没有得到的是,这将如何防止会话劫持,因为它会显示在代码中。如果会话被劫持,用户仍然无法登录,因为它不是真正的会话(用于登录),但他可以发送文件。我在这里可以看到的唯一技巧是标志“上传”。但在这种特殊情况下,用户可以发送很多文件,而无需重新加载整个页面(这是uploadify的功能)。 – 2010-11-04 22:16:32
另外,假设用户已经进入上传页面,会话被生成,然后他等待一些原因,此时劫持会话的人可以发送文件。这样对吗?我错过了什么吗? – 2010-11-04 22:17:27
你的观点是会话固定,这将被阻止(即:如果有人被发送到具有特定帖子/获取var的url,它不会是他/她登录会话的会话ID)。但是,如果您通过非HTTPS提供页面服务,则所有投注都是,并且是的,劫持程序可以看到上传的session-id,但是之后他可以看到会话cookie,因此他可以登录为真实。把它放在HTML中并不是那么安全,然后将它放在标题中,并且很容易被劫持。要点是:这样可以防止会话劫持,而不是其他类型的劫持。 – Wrikken 2010-11-04 22:27:58