2016-04-01 3 views
-1

У меня есть большой фокус на безопасности, и я пытаюсь защитить свою $ _SESSION. Я бы хотел, чтобы вы посоветовали.- способ защитить сеанс?

  1. Когда пользователь создает учетную запись, я генерирую случайное значение от 11111 до 99999 в своем профиле в базе данных.

  2. При входе пользователя я создаю сеанс, который содержит большинство пользовательских данных (без пароля или критической информации). В этой $ _SESSION я также добавляю зашифрованную версию этого случайного числа, которое я создал на шаге 1, и также создаю $ _COOKIE с тем же зашифрованным номером, который я буду использовать, чтобы проверить, действительно ли сеанс.

  3. В моем приложении, когда я получаю запрос, я проверяю существование существующей $ _SESSION на самом деле, но чтобы предотвратить хакер (догадываться или взломать) идентификатор сеанса других людей. Я сравниваю зашитое значение ключа от $ _COOKIE с одним внутри $ _SESSION.

Главный квест: насколько безопасен этот метод? Я не вижу, как хакер может украсть идентификатор $ _SESSION и в то же время зашифрованный ключ.

шифрование ключа генерируется значением шифрования, расположенным на сервере, а не простым md5, которое с моей точки зрения легко воспроизвести. поскольку хакер не может знать значение шифрования, которое я использую для шифрования этого ключа.

затем в конце, когда пользователь отправляет запрос на сервер, он выглядит так (я упростил код).

if(isset($_SESSION['key'])){ 
    if($_SESSION['key'] == $_COOKIE['key']){ 
     // do stuff here 
    } 
    else { 
    die(); 
    } 
} 
else { 
    die(); 
} 
+2

_ «Я не вижу никакого способа, как хакер может как украсть идентификатор $ _SESSION, так и в то же время знать зашифрованный ключ "_ - почему бы и нет? Вы сохраняете как идентификатор сеанса, так и свое случайное значение в файлах cookie, поэтому, если злоумышленник получает доступ к одному, почему они не должны иметь доступ к другому одновременно? // Ваш вопрос читается так, как будто вы, скорее, новичок в этой области - в этом случае я думаю, что было бы лучше, если бы вы использовали механизм сеанса PHP как есть, и не пытайтесь ничего добавлять к чему-либо самостоятельно. – CBroe

+0

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

+0

Итак, вместо того, чтобы угадать одно значение, злоумышленнику теперь нужно угадать два. По сути, вы только что добавили * больше энтропии *, что означает, что злоумышленник должен угадать * более длинное значение *. Вы можете реализовать это просто, создав более длинный идентификатор сеанса, он имеет тот же эффект. – deceze

ответ

0

Нет необходимости в этом. Проверка сеанса уже выполняется для вас с помощью PHP. Когда вы начинаете сеанс, на стороне клиента создается файл cookie и файл на стороне сервера. Cookie содержит имя файла на стороне сервера. Сеансы продолжаются до тех пор, пока cookie живет в браузере или сеанс уничтожается.

Также смотрите: How do PHP sessions work?

по моему заявлению, а затем, когда я получаю запрос я проверить, если $ _SESSION существует на самом деле она должна существовать, но предотвратить хакер ( догадки или взломать) другие человек сессия ID я сравнить значение encryped ключа от $ _COOKIE с одной внутри $ _SESSION

Как для начала вы могли бы session_regenerate_id(true); сделать труднее злоумышленнику взломать ваш идентификатор сеанса.

Некоторые чтения о безопасности сеанса:

questions/12233406 questions/5081025

+0

спасибо, что я прочитал его, но то, что я хочу предотвратить до 100%, - это вероятность угадывания сессии. – Mireille28

1

Убедитесь, что вы имеете срока на печенье, а также удалить куки на выходе из системы.

Прежде всего, убедитесь, что сессия закончилась. В противном случае кто-то может украсть файл cookie и продолжить сеанс (все еще активный) с другого компьютера позднее.

Я бы также включил пользовательский IP-адрес в шифрование и любые другие данные, которые делают сеанс уникальным.

-1

Общая идея выглядит хорошо для меня (я не эксперт).

Что следует учитывать: Что происходит, когда cookie не существует?

Другой способ генерации базового значения, который вы «hash» позже каким-то образом, наиболее рекомендуется, вероятно, mcrypt_create_iv(). Интервал, который вы упомянули (11111 - 99999), слишком узкий (в вычислительном времени); если вы хотите получить фантазию random.org имеет хорошие API для случайных чисел (не просто псевдослучайные)

+0

Моя система не позволит пользователю войти, если cookie не существует – Mireille28

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