Django аутентификация удаленного пользователя и безопасность - PullRequest
5 голосов
/ 01 марта 2012

Я использую Django аутентификацию удаленного пользователя в проекте. На самом деле я просто использую django.contrib.auth.RemoteUserBackend без промежуточного программного обеспечения и вручную вызываю authenticate после проверки с помощью серверной части, что пользователь является законным.

Читая источник промежуточного программного обеспечения, кажется, что оно просто берет имя пользователя из заголовка в запросе, а затем аутентифицирует пользователя по бэкэнду, передающему это имя пользователя. Бэкэнд удаленного пользователя, в свою очередь, просто весело регистрирует пользователя с любым именем пользователя, которое было передано. Пользователь получает доступ ко всем областям, для которых требуется действительный логин.

Разве это не огромный недостаток безопасности? Как это использовать?

В моем случае я должен быть в безопасности, поскольку единственный вызов authenticate поступает после успешной удаленной проверки личности, но мне интересно, почему было введено промежуточное ПО.

Ответы [ 2 ]

8 голосов
/ 22 мая 2012

Позвольте мне перевернуть это с вашей стороны: если вы считаете, что это недостаток безопасности, попробуйте написать эксплойт, который устанавливает заголовок REMOTE_USER в запросе к вашему приложению, и посмотрите, что произойдет.

REMOTE_USER восходит к ранним временам Интернета, когда страницы CGI выполнялись локально как пользователь, с которым вы заходили на веб-страницу.REMOTE_USER - это имя переменной среды unix, обозначающей активного пользователя.Поскольку модели безопасности для веб-серверов изменились, эта схема была сохранена для совместимости.Теперь даже IIS поддерживает его для прозрачной обработки входов в Active Directory.

Все переданные пользователем заголовки начинаются с HTTP_.В противном случае вы не могли бы доверять любой информации заголовка, такой как SERVER_NAME, что было бы огромным беспорядком.

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

Django «весело регистрирует пользователя», потому что ваш веб-сервер проверил, что у посетителя есть действительные учетные данные для этого имени пользователя, и соответственно установите заголовок.

Если вы доверяете своему веб-серверу (например, Apache) правильно установить заголовок REMOTE_USER (или другой), это не является недостатком безопасности.

...