#api #security #rest #ssl #access-token
#API #Безопасность #rest #ssl #токен доступа
Вопрос:
Давайте представим, что я не использую SSL и отправляю токен в заголовках HTTP. Токен содержит идентификатор пользователя и зашифрован.
Я могу себе представить, что злоумышленник «человек посередине» может захватить токен и использовать его. Если я использую SSL, он должен быть достаточно безопасным? Но если я не использую SSL…
Могу ли я добавить что-то к токену, например, IP-адрес пользователя, чтобы я мог проверить, совпадают ли IP-адрес запроса и зашифрованный IP-адрес в токене?
Может ли злоумышленник man-in-the-middle подделать IP-адрес жертвы? Могу ли я использовать любую другую информацию, связанную с пользователем, при создании токена?
Спасибо!
Ответ №1:
Может ли злоумышленник «человек посередине» (MITM) подделать IP-адрес жертвы?
Поскольку вы описываете возможную атаку как «человек посередине», да, злоумышленник может подделать IP-адрес жертвы.
Могу ли я использовать любую другую информацию, связанную с пользователем, при создании токена?
Конечно, попросите пользователя сгенерировать случайное число, которое никогда не отправляется в открытом виде. И лучше убедитесь, что сервер также делает то же самое, чтобы злоумышленник «человек посередине» не мог просто воспроизвести старый запрос. И как пользователь может быть уверен, что он общается с реальным сервером, а не с злоумышленником? Лучше подтвердите идентификацию сервера с помощью сертификата.
При разработке протокола, защищенного от атак «человек посередине», возникает много подобных вопросов. Если вы обратитесь ко всем из них, вы, вероятно, получите что-то очень похожее на SSL. Для многих разработчиков просто не стоит тратить время на создание собственного безопасного транспортного протокола.
Комментарии:
1. Спасибо за вашу помощь.
2. «сгенерировать случайное число, которое никогда не отправляется в открытом виде» — как вы могли бы сделать это без SSL? Если вы отправляете пользователю ключ шифрования, сам ключ также может быть перехвачен без SSL?
Ответ №2:
В дополнение к отличному ответу @guest:
Может ли злоумышленник man-in-the-middle подделать IP-адрес жертвы?
Это зависит от того, где находится MITM:
- Если они находятся на другом компьютере в той же сети, что и жертва (но не сервер), тогда они могут использовать один и тот же общедоступный IP-адрес в любом случае. MITM перехватывает трафик жертвы, но ему не нужно будет подделывать IP-адрес, поскольку ваша система будет видеть только общедоступный IP-адрес, который будет таким же.
- Если они находятся в сети вашей серверной инфраструктуры, то могут использовать что-то вроде отравления ARP для перехвата трафика — здесь не требуется подмена IP-адреса жертвы.
- Если они находятся где-то посередине (например, контролируемое правительством магистральное соединение), то подделка IP-адреса может быть более сложной, если не невозможной (подделка IP-адреса означает, что злоумышленник не сможет прочитать какие-либо ответы на свои пакеты, поскольку они будут отправлены обратно на поддельный IP-адрес).
Короче говоря, используйте SSL (или, более технически, TLS).
Комментарии:
1. Спасибо за ваши комментарии. Если кто-то может использовать другой компьютер в той же сети, это не то, что я действительно могу контролировать (я просто разрабатываю веб-фреймворк), пользователи должны защищать свою собственную частную сеть. Сеть хостинга должна быть достаточно безопасной (поставщик IaaS, такой как Amazon или Microsoft). Случай, который заставляет меня беспокоиться, — это «где-то посередине». Я хочу убедиться, что если кто-то не использует TLS, моя платформа по-прежнему будет максимально безопасной, основываясь на вашем ответе, я думаю, что буду использовать IP как часть токена и рекомендовать использовать TLS пользователям платформы