Как сделать сеансы более безопасными?

Возможный дубликат:
Безопасность сеанса PHP

Я использую сеансы по всему моему приложению. Я хочу сделать их намного более безопасными. В настоящее время я использую код как $username = $_SESSION['username']; и тому подобное.

Как сделать сеансы более безопасными?

Первое, что вам нужно будет следить, это захват сеанса . Процитировать Википедию:

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

Основная идея заключается в том, что если посетитель вашего сайта (Алиса) имеет cookie сеанса и идентификатор сеанса (предположим, что это 12345 ), то если злоумышленник (Мэллори) может узнать идентификатор сеанса Алисы через JavaScript, обнюхивание трафика , социальной инженерии или других методах, то Мэллори может перейти на ваш сайт и установить свой идентификатор сеанса до 12345 и он фактически станет Алисой.

Один из способов предотвратить это – изменить идентификатор сеанса для каждого запроса, который вы можете сделать с помощью функции session_regenerate_id PHP . Вы вызывали session_regenerate_id в начале каждого запроса после вызова session_start()

Имейте в виду, что это очень сложная тема. Я настоятельно рекомендовал прочитать статью в Википедии и убедиться, что вы полностью понимаете проблемы в игре.

EDIT: я собирался ввести для вас намного больше информации, но потом я понял, что ваш вопрос действительно является дубликатом этого вопроса StackOverflow . Я бы рекомендовал прочитать это как отправную точку.

Это зависит от того, что вы пытаетесь защитить. Если вас беспокоит, что информация, содержащаяся в сеансе, может быть раскрыта или изменена, вам не нужно беспокоиться об этом, поскольку она может быть видна и изменена только сервером.

Если вас беспокоит возможность того, что некоторые люди могут использовать сеансы других людей, вы можете сделать следующее:

  • Проанализируйте свой код и убедитесь, что у вас нет недостатка XSS .
  • Используйте SSL для предотвращения захвата сеанса, если ваш посетитель использует общедоступную сеть.
  • Убедитесь, что ваша сессия использует флаг HTTP Only

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