Поэтому я недавно принял решение использовать идентификатор сеанса для проверки подлинности на своем веб-сайте вместо JWT, поэтому я все еще пытаюсь немного догнать здесь.
Думаю, моя забота довольно проста. Если я буду иметь мою базу данных обрабатывать мои сеансы, которые в данный момент активны для пользователей, которые вошли в системе (возможно, через таблицу, которая имеет столбец с UserID
и SessionID
), как я могу использовать PHP для создания полностью случайную сессии Я БЫ? Затем я httpOnly
этот идентификатор сеанса в httpOnly
cookie httpOnly
.
Я предполагаю, что это будет работать с моим интерфейсом Angular, поскольку я могу использовать логическую опцию withCredentials
для каждого HTTP-запроса, так как у меня не будет прямого доступа к cookie идентификатора сеанса.
Поэтому, когда пользователь хочет получить доступ к запрещенной зоне, их HTTP-запрос будет содержать cookie идентификатора сеанса, и мой PHP определит, что их идентификатор пользователя, выполнив поиск в таблице CurrentSession
. Это позволит PHP определить уровень доступа пользователя.
Все это будет сделано через соединение HTTPS, но я думаю, что мне все равно придется беспокоиться о атаках CSRF, поэтому я, вероятно, буду использовать метод Double Submit Cookie, поскольку Angular уже поддерживает его.
Поэтому я предполагаю, что мой главный вопрос заключается в том, как просто найти способ создания уникального идентификатора сеанса с помощью PHP для защиты моего приложения? Или каким-то образом шифрование идентификатора сеанса, так что только мой PHP может расшифровать его, это хорошая идея, поэтому, если каким-то образом злоумышленник получил доступ к идентификатору сеанса из файла cookie, он был бы исключительно зашифрованной версией, поэтому он был бы бесполезен,
Я бы предложил использовать PHP session_start(), который будет обрабатывать весь сеанс, включая любые файлы cookie, которые необходимо записать для поддержки сеанса в зависимости от вашего конкретного соединения в то время.
Все, что вам нужно сделать, это поставить это на вершине ваших PHP-скриптов:
<?php
session_start();
Постоянный "SID" PHP должен быть доступен, чтобы получить идентификатор сеанса, который вы могли бы хранить в MySQL для других целей, если хотите - но это может и не понадобиться. Вы также можете использовать session_id().