Джанго:Существует ли безопасный и надежный способ разрешить владельцам учетных записей иметь отдельные домены в вашем приложении?

StackOverflow https://stackoverflow.com/questions/2240812

Вопрос

Если я хочу, чтобы владельцы моих учетных записей могли иметь свои собственные поддомены и даже вообще свои собственные домены.Используя NGINX в качестве моего прокси-сервера, должен ли я создавать домены для каждого из них в моем NGINX conf и просить моих клиентов указывать там свои домены или есть причины, по которым это было бы плохо?Кроме того, если я это сделаю, как я могу передать информацию, относящуюся к конкретной учетной записи (учетная запись в Django DB), вместе с запросом (т. Е. запросом от www.spamfoosaccount.com на мой сервер, поэтому я перенаправляю запрос обратно в Apache, но как мое приложение узнает, что он пришел из учетной записи spamfoo, если я не посмотрю на request.HTTP_HOST (что может быть лучшим способом, но я не знаю, пока не спрошу).Заранее благодарю.

Это было полезно?

Решение

Чтобы узнать, с какого домена поступает запрос, вы должны использовать request.META["HTTP_HOST"].

Однако не полагайтесь на это значение для аутентификации, его можно легко подделать.Аутентификация должна выполняться обычным способом с помощью django.contrib.session.Запрос от определенного домена / поддомена не должен иметь дополнительных привилегий / прав, даже если запрос содержит аутентифицированный сеанс.Привилегии должны предоставляться пользователям/группам пользователей, а не доменам.

Обратите внимание, что сеансы браузера не могут пересекать домены второго уровня (напримерсессионный файл cookie от foo.com не будет отправлен на bar.com), однако это может быть * .foo.com файл cookie для всех поддоменов (если вы явно настроили его таким образом).

Позвольте вашим пользователям указывать свои DNS-записи на IP вашего сервера, позвольте NGINX перенаправлять запрос на основе домена на ваш серверный сервер и выполнять обычную аутентификацию в Django.

Ваш вопрос:

как мое приложение знает, что это пришли со счета spamfoo по

Я не знаю специфики вашего приложения, но должно иметь значение не то, откуда поступил запрос, а то, кто отправил запрос (напримераутентифицированный пользователь).У вас должна быть модель / поле, которое связывает ваших пользователей с их соответствующими доменами.Когда пользователь связан только с одним доменом, приложение должно предполагать, что пользователь пришел из этого домена.Когда пользователь подключен к нескольким доменам, вы можете посмотреть на request.META["HTTP_HOST"].Если это значение соответствует любому из доменов, на которые связан пользователь, все в порядке, значение может быть подделано, но пользователем, который, тем не менее, связан с этим доменом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top