Я бы порекомендовал, в дополнение к тому, что большинство заявило здесь о передаче зашифрованной информации, смотреть на это так же, как если бы вы передавали конфиденциальную информацию через сторонний API. Откуда вы знаете, что кто-то не подделывает запрос? Существует множество протоколов для действительного подтверждения подлинности запроса, в зависимости от того, насколько чувствительны ваши настройки. Вы подвергаете себя риску взлома учетных записей, если не будете осторожны.
Даже если он находится на том же сервере, учтите следующее:
Когда кто-то переходит по ссылке, формирует действие и т. д., которые передаются зашифрованному ключу, что может помешать кому-то перехватить его ДО того, как он попадет на защищенную версию вашего сайта? Если бы я был в общедоступной точке WIFI, это не было бы слишком надуманным. Я мог бы притвориться вашим сайтом, перенаправить запросы на свой ноутбук, получить токен и перенаправить посетителя туда, откуда он пришел. Они бы предположили, что это был сбой, и не имели бы ни малейшего представления. Теперь я могу войти в систему как они и, возможно, пойти купить вещи на 10 000 долларов с их кредитной картой и отправить их куда-нибудь еще. Степень осторожности, которую вы проявляете здесь, должна соответствовать степени чувствительности.
Кроме того, убедитесь, что срок действия ваших токенов истек (только одно использование, через X секунд и т. д.), но я бы также рассмотрел возможность использования шаблона Post-Redirect-Get на обоих концах, то есть:
Не показывайте прямую ссылку на странице или в форме незащищенного сайта, но покажите ссылку, которая затем будет перенаправлять на серверную часть (и обрабатывать все токены/шифрование). Когда вы доберетесь до защищенной версии, сделайте то же самое (не оставляйте параметр «?token=asdfjalksfjla» в URL-адресе; перенаправьте его).
Таким образом, формальные системы на основе токенов были разработаны для решения именно этой проблемы, но внедрение OAuth только для этого может быть излишним. Потратьте некоторое время на планирование потенциальных уязвимостей перед выполнением. Тот факт, что будет очень сложно угадать токен, не означает, что это невозможно (или не может быть коллизий и т. д.), так что планируйте соответствующим образом.
Вам также может понадобиться более сложная система управления сессиями, чем встроенные обработчики PHP. Я не знаю, можете ли вы заставить PHP продолжать сеанс при нескольких посещениях (переключение протоколов обрабатывается таким образом).
person
landons
schedule
16.11.2011