HTTP Referer для единого входа - PullRequest
1 голос
/ 30 марта 2012

В рамках проекта с партнером мы обязаны предоставлять услугу единого входа в наше приложение.В основном, люди заходят на сайт нашего партнера, а затем перенаправляются на наш.Перенаправленный запрос будет содержать данные пользователя в полях заголовка HTTP.

Вот где он получает "iffy".Процесс аутентификации, если этот запрос действителен или нет, зависит от значения поля HTTP Referer.Наш партнер говорит нам, чтобы проверить это поле, чтобы увидеть, что источник является законным.

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

Сначала я программист и, по общему признанию, очень мало знаю о тонкостях HTTP, Так мои опасения реальны?Будет ли использование SSL (каким-либо образом) аннулировать эту проблему?

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Помните, что правило номер один никогда не доверяйте вводу клиента .Как и любой другой клиентский ввод, заголовок Referer тривиален для подделки.SSL ничего не делает для вас, потому что вы все еще полагаетесь на клиентский ввод.Кроме того, обратите внимание, что браузеры НЕ ДОЛЖНЫ отправлять Referer на страницы http при обращении по страницам https.

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

Чтобы сделать это правильно, вам нужно использовать что-то вроде OAuth или OpenID, где протоколы были разработаны для обеспечения безопасности.

2 голосов
/ 30 марта 2012

Заголовок HTTP Referrer ненадежен: в зависимости от используемого браузера он может не отправляться.

Сохраняет ли http-equ = "refresh" информацию и метаданные реферера?

1 голос
/ 30 марта 2012

Да - это подделка.

Нет - клиент может так же легко отправить (поддельный) HTTPS-запрос, как (поддельный) HTTP-запрос. Разница лишь в том, что соединение зашифровано. Он ничего не говорит о передаваемых данных.

Как говорится, это еще одна мера предосторожности , которую можно использовать. Однако не следует полагаться на безопасность .

Я бы посмотрел на Microsoft Federation - это, вероятно, излишне, но показывает один способ безопасного внедрения единого входа.

...