Pull to refresh

Задача 19: Секурность

Reading time1 min
Views1.2K
Задача: сделать достаточно защищенный механизм аутентификации на PHP.

Способ 1.
В форму передается случайная последовательность, на стороне сервера она запоминается в таблице в связке SESSION_ID && S_KEY. На стороне клиента выполняется преобразование вида
sha1(sha1(password) + S_KEY). sha1(password) — предпологаемый хэш пароля в базе, S_KEY — переданная последовательность. В результате мы имеем постоянно меняющийся хэш, который безопасно передать на сервер.
На сервере полученный хэш сравнивают с sha1(password_from_db + S_KEY). Если совпадает, в переменную $_SESSION['user'] заносим подгруженный инстанс класса пользователя.

Тут все хорошо и правильно, но не совсем секурно.

Что может сделать злоумышленник?
1. Украсть кукизы с сессией.
2. Перехватить трафик и снова украсть сессию.

Что нам нужно?
Мы должны быть уверены в том, что сессия жостко привязана к пользвателю на другой стороне.

IP — не выход, его можно подменить. Да и для людей, сидящих за NAT, IP будет общий.

Что же делать?
Использовать удалённый порт. Как правило браузер не меняет порт для сайта, и он долго остается неизменным. NAT тоже не меняет порт, потому что он ему нужен для проброса пакетов.

Замечание: данный метод применим только к критически важным участкам системы. Для пользователя хватит и Способа 1. Все потому, что никто не гарантирует статичность порта на всю сессию, а это повлечет постоянные ре-логины, что пользователь просто не моймёт.
Tags:
Hubs:
0
Comments34

Articles

Change theme settings