Конспект реалізації прикладної системи на PHP

//

//

Сессии

//

  • session_start(array $options = []): bool возобновляет существующую сессию или создает новую

/

PHP:

/

JS от GPT:

/

JWT

 //wikipedia.org/wiki/JSON_Web_Token
JWT: Debugger | Libraries | Introduction //jwt.io

Это открытый стандарт (RFC 7519) для создания токенов доступа, используя JSON, Base64 и алгоритм шифрования (например  SHA256).

Как правило, токен используется в заголовке Authorization в JavaScript запросе через XMLHttpRequest или Fetch API.

Джерела

Как использовать сессии и переменные сессий в PHP //code.tutsplus.com

https://qna.habr.com/q/801597

granty @granty
Сессия - это Кука с именем PHPSESSID (по умолчанию, его можно изменить) и значением вида 8jae35cosacp2f5qv6g2uqe6i7. Все данные сессии (массив $_SESSION) хранятся на стороне сервера в файле с именем 8jae35cosacp2f5qv6g2uqe6i7 в формате JSON (можно хранить и в БД).
То есть, вам надо не дописывать 1, а угадывать это имя, что нереально.

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

Куку можно перехватить во время передачи по сети, для защиты от этого есть механизмы:

- установить заголовок HSTS, это заставит браузер работать только по HTTPS, те Кука будет зашифрована при передаче по сети.

- в самой сессии можно хранить IP адрес(привязка сессии к IP). Тогда даже с правильной Кукой не залогиниться, поскольку не совпадет IP (который хранится в $_SESSION на стороне сервера). Неудобно если провайдер меняет IP при каждом переподключении.

- можно в сессии хранить User Agent (все равно Кука - она только для этого браузера). Но при автоматическим апдейте браузера придётся авторизоваться заново, и у кого хватило ума перехватить Куку - перехватит и имя User Agent-а.

- можно в сессии хранить fingerprint браузера (или даже всего компа), только надо придумать как безопасно передавать его на сервер, чтобы сохранять в сессии (и для сравнения при авторизации). Его же тоже могут перехватить.

- при каждой авторизации по Куке, и через каждые ## секунд можно(и нужно) делать session_regenerate_id (меняется 8jae35cosacp2f5qv6g2uqe6i7 на другое), там по ссылке есть пример как это сделать прямо внутри сессии. То есть, угнанная Кука быстро перестаёт работать.

- можно делать "сессионную" Куку (не указывать её время жизни). Такая Кука живёт до закрытия браузера, но после закрытия браузера придётся заново вводить логин/пароль

Можно добавить своей безопасности - например отправлять email пользователю при каждой авторизации по Куке, если не было активности Пользователя более 12 часов.

PS: Если пользоваться сессиями правильно - они достаточно безопасны, практически вся авторизация в интернетах построена на них.

Leave a Reply