Создать сеанс временной загрузки в скрипте (непроверенной, но вы получите точку о возможности иметь несколько различных сеансов):
<?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 куки, и, возможно, UPLOADSESSION фиксируется, но вы не используете его ни для чего другого, кроме загрузки, и только для 1 загрузки (хотя вы можете захотеть больше).
В качестве альтернативы вы можете просто позвонить session_regenerate_id();
по первому запросу после загрузки (просто установите флаг в $_SESSION
при загрузке).
Здесь пользователь все еще имеет идентификатор сеанса, но тот, который используется только для действия загрузки, не так ли? Я не понял, как это предотвратит захват сеанса, поскольку он будет отображаться в коде. Если сеанс взломан, пользователь все еще не может войти в систему, поскольку он не является реальным сеансом (используется для входа в систему), но он может отправлять файлы. Единственный трюк, который я вижу здесь, - это флаг «upload». Но в этом конкретном случае пользователь может отправлять много файлов без перезагрузки всей страницы (это то, что делает uploadify). –
Кроме того, скажем, что пользователь ввел на страницу загрузки, сессия была создана, а затем он почему-то подождал, и в этот момент кто-то, кто захватил сессию, может отправлять файлы. Это правильно? Я что-то упускаю? –
Ваша задача заключалась в 'session-fixation', что будет предотвращено (например: если кто-то будет отправлен на URL-адрес с определенным сообщением/get var, это не будет идентификатор сеанса его/ее входа в сеанс). Если вы, тем не менее, обслуживаете страницу по не-HTTPS, все ставки есть, и да, угонщик может видеть идентификатор сеанса для загрузки, но опять же: он также может видеть файл cookie сеанса в это время, поэтому он может быть для входа в систему. Наличие его в HTML не менее безопасно, чем его в заголовке, и его легко захватить. Дело в том, что это предотвращает захват сеанса путем фиксации, а не других видов угона. – Wrikken