Альтернативным способом сделать это может быть использование файла cookie в качестве зашифрованного хранилища только для данных о косвенности. Вам понадобится какой-то незашифрованный идентификатор, который будет служить указателем на ключ (или необходимую информацию для получения ключа) в базе данных приложения, за которым следует blob, зашифрованный ключом, полученным из идентификатора, который сам будет содержать своего рода одноразовый идентификатор, который аутентифицирует сеанс.
Учитывая следующие допущения:
- Ваша база данных находится в безопасности (например, ваше приложение может получить доступ к нему, но ваш пользователь не может напрямую сделать это, а также при условии, что заявка была оборудована устройством против инъекции SQL)
- Ваши соли сильны; то есть, достаточно высокая энтропии достаточно того, что попытки взломать подсоленной пароль неосуществимо, даже если пароль известен
Тогда что это обеспечит метод, с помощью которого можно с достаточной степенью уверенности, что сессия не может быть захваченным или украденным каким-либо образом.То есть скопированный файл cookie имеет ограниченную полезность, поскольку пользователь не должен использовать cookie между его кражей и использованием злоумышленником.
Хотя это защищает от повторного воспроизведения, это также означает, что если кому-то удастся украсть файл cookie точно в нужное время, и ему также удастся использовать его до того, как оригинальный, законный пользователь сделает это, злоумышленник теперь контролирует сессия. Можно ограничить сеанс IP-адресом для уменьшения этого риска (несколько: если и пользователь, и злоумышленник находятся за одним и тем же NAT, что является наиболее вероятным сценарием в любой домашней или малой и среднесрочной бизнес-сети), то этот момент довольно спорный вопрос, так как IP-адрес, казалось бы, то же самое в любом случае. Также полезным может быть ограничение для текущего пользовательского агента (хотя это может неожиданно ломаться, если пользователь обновляет свой браузер, а сеанс не истекает при закрытии браузера) или найти какой-либо метод, с помощью которого можно определить компьютер, на котором находится пользователь достаточно хорошо, что есть разумная уверенность в том, что пользователь не переместил файл cookie из одной системы в другую. Если не использовать какой-либо бинарный плагин (Flash или Silver/Moonlight), я не уверен, что последнее возможно.
Для защиты от постоянного захвата сеанса требуется, чтобы пользователь периодически повторно проверял себя (например, ограничивал продолжительность сеанса сеанса или требовал что-то вроде токена/фоб/ключа) и требовал, чтобы пользователь повторно аутентифицировал его - или себя при входе в чувствительные области приложения, такие как смена пароля и потенциально опасные действия, шаблоны или поведение, такие как удаление данных, необычные шаблоны использования, массовые действия и т. д.
Трудно защитить приложения и при этом сохранить их простоту использования. Если все сделано осторожно, безопасность может быть реализована таким образом, чтобы она была минимально навязчивой и, тем не менее, эффективной, но для большинства приложений, ориентированных на Интернет.
Вам не нужно будет хранить пароль, чтобы «запомнить» пользователей, не так ли? –
@ o.k.w: Он скорее используется для повторной проверки подлинности пользователя. – Gumbo