PHP, MYSQL - Аутентификация на основе токенов: что, если кто-то украл мой токен? - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь понять, правильно ли я понимаю использование "аутентификации на основе токенов". Например, предположим, что у меня есть форма для входа и я хочу аутентифицировать пользователя. Система основана на базе данных HTML, PHP & MySQL.

Процесс: 1. Введите имя пользователя и пароль и отправьте их на сервер. 2. Сервер (PHP) проверит таблицу «пользователи» в базе данных, если данные верны. 3. Если данные верны, сервер создает секретный токен и вставляет его в таблицу «auth_token» в базе данных. 4. Секретный токен сохраняется в файле cook ie, и пользователь передает токену каждый HTTP-запрос для получения доступа.

Пока здесь все нормально. Но что, если сторонний фактор, такой как хакер, сможет украсть у пользователя токен-повар ie? Тогда хакер получит полный доступ к учетной записи пользователя. Я прав? Если я прав, то как это можно предотвратить? Если это возможно в любом случае ... Спасибо!

1 Ответ

1 голос
/ 19 апреля 2020

Краткий ответ: вы не можете полностью запретить кому-либо перехватывать токен авторизации. (Некоторые версии этого типа атаки известны как Replay Attack ). Тем не менее, есть вещи, которые вы можете сделать, чтобы смягчить ущерб, который может быть нанесен, если кому-то удастся украсть токен (и это, вероятно, вы заметили на других сайтах).

Одна простая вещь, которую нужно сделать, - это то, что сайт попросит пользователя выполнить повторную проверку, прежде чем он сделает что-то слишком серьезное. Например, вас могут снова попросить ввести пароль, прежде чем сменить адрес электронной почты или пароль. Хотя злоумышленник, возможно, украл ваш токен, менее вероятно, что он также знает ваши учетные данные (особенно если сайт использует двухфакторную аутентификацию), поэтому вы можете уменьшить количество ущерба, которое может быть причинено, побуждая пользователей повторно проходить аутентификацию перед определенные критические шаги.

Для более безопасных систем токен обновляется после каждого запроса, поэтому его нельзя воспроизвести. Это больше работы для приложения, поскольку оно должно проверять входящий токен, а затем подписывать и возвращать новый токен для каждого запроса / ответа. Уловка в том, что если злоумышленник может украсть ваш токен и он отправит запрос до того, как вы , то его запрос будет принят, и ваш запрос не будет выполнен (!), Потому что для сервера ваш запрос будет похож на подражателя. Однако, если это произойдет, вы можете снова войти в систему и, надеюсь, загрузить любые другие токены, зарегистрированные в вашей учетной записи (подробнее об этом далее).

Некоторые веб-приложения будут показывать, сколько токенов авторизации было выпущено для ваш пользователь. Google хорошо справляется с этой задачей: вы можете просматривать другие учетные записи на других устройствах (обычно вместе с некоторой информацией о пользовательском агенте и расположении IP-адреса), поэтому вам будет легче заметить, что там есть странный токен и важная информация. Дело в том, что он позволяет вам отключить эти другие токены.

Существуют также «нечеткие» защиты, которые могут быть выполнены с помощью брандмауэров уровня приложений. Они могут выполнять такие действия, как оценка IP-адресов или пользовательских агентов запросов, и если «один и тот же» пользователь подозрительно отправляет один и тот же токен с двух совершенно разных IP-адресов или браузеров, брандмауэр может регистрировать ошибку или предпринимать какие-либо другие предупредительные действия. действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...