2009-04-17 7 views
6

До сих пор мои развертывания https обычно включали наивное блокирование всего сайта с помощью https и предоставление перенаправления http-https на веб-сервере.Смешанный сайт http/https

Теперь я планирую иметь один сайт ASP.NET MVC (в облаке), который будет содержать как страницы http, так и https. Таким образом, сайт будет иметь 2 концептуальные (не физические) зоны, обеспечивающие как безопасные, так и незащищенные запросы.

Конфигурирование. Я установил входные порты как для 80, так и для 443, и сайт принимает оба запроса.

Есть ли способ перевести протокол на https для любого вызова, который переходит к действию, которое принадлежит защищенной зоне? Например, такие действия, которые могут выполнять фильтры действий.

Большое спасибо.

редактировать:Пожалуйста, обратите внимание, что вся идея этого избежать, используя абсолютные URL'ы на атрибут формы действий из-за проблемы с переносимостью и потому, что пользователь не будет видеть https: // обеспечения визуальных подсказок на браузере ,

P

ответ

6

Вы можете взглянуть на фьючерсной сборке MVC от Microsoft available for download here.

Это имеет FilterAttribute, RequireSslFilterAttribute, что позволяет легко помечать методы действий в контроллере, которые требуют SSL - например,

[RequireSsl(Redirect=true)] 
public ActionResult LogOn() 
{ 
    return View(); 
} 

Необязательный параметр редирект вызовет запрос будет перенаправлен на тот же URL, но через HTTPS вместо HTTP, если это необходимо.

ВНИМАНИЕ: Как отмечает Даниил, к тому моменту, когда вы нажмете на это действие, может быть уже слишком поздно, если данные были отправлены на небезопасную версию страницы - это уже потенциально скомпрометировано, поэтому вам все равно нужно выполнять при использовании этого и убедитесь, что все конфиденциальные данные отправляются через https. (Я только что заметил ваш комментарий к Даниэлю, вы, очевидно, это понимаете, я оставлю предупреждение здесь для всех, кто наткнулся на это, хотя!)

EDIT: Как указывает Лука, в MVC2 этот атрибут теперь является частью основной каркас и переименован в [RequireHttps]

+0

Большое спасибо, Стив. Потрясающие. –

+0

Извините, если это неправильно - обучение также - в MVC 2 похоже, что этот атрибут стал RequireHttps. Подробнее здесь: http://stackoverflow.com/questions/1639707/asp-net-mvc-requirehttps-in-production-only –

+0

Хорошо заметили, спасибо Люку :) –

0

Есть ли способ, что я могу перевернуть протокол к HTTPS для любого вызова, который идет к действию, которое принадлежит в безопасной зоне?

Короткий ответ: нет, как только запрос пришел через http, он уже был потенциально скомпрометирован. Вы можете потребовать, чтобы определенные вызовы поступали через HTTPS (не знаю, как это сделать, поскольку я еще не выполнял ASP.Net) и отправляю сообщение об ошибке, если они этого не делают. Ключ должен решить, когда вы хотите, чтобы приложение совершило переход, то есть во время входа в систему, и выберите HTTPS в качестве действия для этих форм. Это то, что вы подразумеваете под «фильтрами действий»?

+0

Извините Daniel, если вы не переверните запрос в запросе GET, который возвращает форму. Запрос на получение не должен быть безопасным. Это сообщение, которое делает. Вы можете потребовать, чтобы определенные вызовы поступали через HTTPS, используя абсолютный URL-адрес, который я намерен избежать. Спасибо, хотя для того, чтобы помочь мне. –