2010-11-04 8 views
0

Я использую uploadify, и скрипт (который использует adobe flash) создает новый сеанс вместо использования текущего при запросе URL-адреса для загрузки. Чтобы исправить это, мне нужно передать идентификатор сеанса.Как защитить пароль и установить идентификатор сеанса?

Есть ли способ сделать это без фиксации сеанса разрешений (угона)?

Вот некоторые подробности проблемы: Sessions and uploadify

Спасибо!

ответ

2

Создать сеанс временной загрузки в скрипте (непроверенной, но вы получите точку о возможности иметь несколько различных сеансов):

<?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 при загрузке).

+0

Здесь пользователь все еще имеет идентификатор сеанса, но тот, который используется только для действия загрузки, не так ли? Я не понял, как это предотвратит захват сеанса, поскольку он будет отображаться в коде. Если сеанс взломан, пользователь все еще не может войти в систему, поскольку он не является реальным сеансом (используется для входа в систему), но он может отправлять файлы. Единственный трюк, который я вижу здесь, - это флаг «upload». Но в этом конкретном случае пользователь может отправлять много файлов без перезагрузки всей страницы (это то, что делает uploadify). –

+0

Кроме того, скажем, что пользователь ввел на страницу загрузки, сессия была создана, а затем он почему-то подождал, и в этот момент кто-то, кто захватил сессию, может отправлять файлы. Это правильно? Я что-то упускаю? –

+0

Ваша задача заключалась в 'session-fixation', что будет предотвращено (например: если кто-то будет отправлен на URL-адрес с определенным сообщением/get var, это не будет идентификатор сеанса его/ее входа в сеанс). Если вы, тем не менее, обслуживаете страницу по не-HTTPS, все ставки есть, и да, угонщик может видеть идентификатор сеанса для загрузки, но опять же: он также может видеть файл cookie сеанса в это время, поэтому он может быть для входа в систему. Наличие его в HTML не менее безопасно, чем его в заголовке, и его легко захватить. Дело в том, что это предотвращает захват сеанса путем фиксации, а не других видов угона. – Wrikken

Смежные вопросы