безопасность сеанса в php

Каков наилучший способ узнать, является ли пользователь правильным парнем, а не хакером? Например, в моем проекте, когда пользователь регистрируется, я создаю некоторую переменную сеанса с некоторым номером, а затем на других страницах проверяю эту переменную сеанса и, согласно ее значению, предоставляет пользователю некоторые параметры.

Так может ли хакер изменить эту переменную так или иначе, чтобы серверная сторона предоставила ему доступ к некоторым параметрам?

Если да, то каков наилучший способ удержания прав некоторых пользователей и передачи их на разные страницы, поэтому сервер может предоставить этому пользователю некоторые параметры?

Чтобы более четко понять захват сеанса, существует несколько способов, с помощью которых хакер захватывает сеанс, позвольте мне рассказать о различных типах захвата сеанса.

согласно Википедии

Существует четыре основных метода, используемых для совершения захвата сессии:

  1. Фиксация сеанса, когда злоумышленник устанавливает идентификатор сеанса пользователя одному известному ему, например, отправив пользователю электронное письмо со ссылкой, содержащей определенный идентификатор сеанса. Теперь злоумышленнику нужно только подождать, пока пользователь войдет в систему.

  2. Session sidejacking, где злоумышленник использует обнюхивание пакетов для чтения сетевого трафика между двумя сторонами, чтобы украсть файл cookie сеанса. Многие веб-сайты используют SSL-шифрование для страниц входа, чтобы предотвратить появление злоумышленниками пароля, но не используйте шифрование для остальной части сайта после аутентификации. Это позволяет злоумышленникам, которые могут читать сетевой трафик, перехватывать все данные, отправленные на сервер или веб-страницы, просматриваемые клиентом. Поскольку эти данные включают в себя куки-файл сеанса, он позволяет ему выдавать себя за жертву, даже если сам пароль не скомпрометирован. 1 Небезопасные горячие точки Wi-Fi особенно уязвимы, так как любой, кто поделился сетью, как правило, сможет читать большую часть веб-трафика между другими узлами и точкой доступа.

  3. В качестве альтернативы злоумышленник с физическим доступом может просто попытаться украсть ключ сеанса, например, получить содержимое файла или памяти соответствующей части компьютера пользователя или сервера.

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

Хотя есть несколько способов остановить этот захват, например, для второго, использующего SSL или https, было бы целесообразно избежать этого. однако, если вы хотите добавить дополнительную безопасность для своей сессии, то одно решение, с которым я столкнулся, – это разрешить передачу файлов seeionId только через файлы cookie, а также генерировать и дополнительный токен сеанса, который передается по URL-адресу. и только запрос, содержащий действительный сеанс toekn, может получить доступ к сеансу.

Ниже приведен пример, демонстрирующий пример, сделанный Orielly PHP CookBook.

ini_set('session.use_only_cookies', true); session_start(); //Create a random salt value $salt = 'Hjkhkjh9089&j98098'; $tokenstr = (str) date('W') . $salt; //Create a md5 hash to be used for token. $token = md5($tokenstr); if (!isset($_REQUEST['token']) || $_REQUEST['token'] != $token) { // prompt for login exit; } $_SESSION['token'] = $token; output_add_rewrite_var('token', $token); 

Теперь, что делает output_add_rewrite_var , он добавляет другую пару имя / значение в механизм перезаписи url через метод Get. Подробнее читайте здесь. output_add_rewrite_var

чтобы узнать больше о безопасности сеанса, я предлагаю вам прочитать эту статью http://hungred.com/useful-information/solutions-session-attacks/

надеюсь, что это поможет вам понять уязвимости сеансов и как их исправить.

создавать хэш из ip (лучше не), идентификатор сеанса и некоторые другие уникальные данные в cookie пользователя и проверять каждый запрос … таким образом вы можете контролировать захват сеанса

в другой руке у вас должна быть таблица для каждого сеанса для привилегий, таких как система acl … сохранить все настройки в базе данных и с помощью идентификатора сеанса найти все настройки

Честно говоря, если вы не владеете методами аутентификации, я бы предложил использовать установленный провайдер (или аналогичный, такой как Google , Facebook , Twitter и т. Д., Используя oAuth), у которых есть эксперты в данной теме. Зачем пытаться и изобретать колесо, когда есть крупные компании с полевыми экспертами, предоставляющими этот точный сервис? Использование этих поставщиков также даст вам представление о том, как обеспечить безопасную аутентификацию для ваших систем.