Как мне сделать OPPOSITE из [RequireHttps(Redirect=true)] в ASP.NET MVC
Я знаю простой способ получить доступ к странице SSL в ASP.NET MVC - через атрибут [RequireSSL], но я немного запутался в том, как лучше сделать обратное.
У меня есть много ссылок на моем сайте в строке заголовка, и большинство из этих ссылок не требуют SSL, и я не хочу все еще использовать SSL.
Проект Futures позволяет очень легко автоматически перенаправить на страницу SSL с [RequireSSL(Redirect=true)]
, но это, кажется, не позволяет легко выйти из этого контекста и автоматически перенаправить обратно на http.
Что мне не хватает?
3 ответа
Вы ничего не пропускаете; для этого нет готовых функциональных возможностей. Вы можете легко создать свой собственный, взяв источник RequireSslAttribute и изменив его.
Ответ на тупой вопрос в другом месте:
Как выйти из режима https в http в asp.net mvc.
ПРЕДУПРЕЖДЕНИЕ. Если вы решите использовать этот подход, ваш файл cookie для проверки подлинности будет отправлен поверх простого текста после переключения обратно на HTTP и потенциально может быть украден и использован кем-то другим. Смотрите это. Другими словами - если бы вы использовали это для банковского сайта, вам нужно было бы убедиться, что переключение на http сначала отключит пользователя.
public class DoesNotRequireSSL: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var response = filterContext.HttpContext.Response;
if (request.IsSecureConnection && !request.IsLocal)
{
string redirectUrl = request.Url.ToString().Replace("https:", "http:");
response.Redirect(redirectUrl);
}
base.OnActionExecuting(filterContext);
}
}
Это стоит прочитать (особенно для того, чтобы осознать последствия для безопасности, связанные с небрежным переключением на http
от https
:
Частично SSL-защищенные веб-приложения с ASP.NET - не специфичные для MVC, но важные проблемы безопасности
Частичный сайт SSL с ASP.NET MVC - MVC дружественный
Это довольно сложный вопрос в целом. До сих пор не нашел истинного решения всего, что я хочу сделать, но думал, что эти статьи могут помочь другим.