ASP.NET: лучшая практика для перенаправления на https - PullRequest
8 голосов
/ 16 декабря 2009

Я работаю над проектом, в котором есть одна страница, для которой необходимо использовать сертификат SSL. Все ссылки на сайте на эту страницу используют https вместо http, но в случае, если пользователь может перейти непосредственно на страницу, я хочу, чтобы версия http страницы перенаправляла на себя, но использовал https.

Я могу сделать Response.Redirect в событии page_load. Я могу написать javascript, который будет обновлять location.href, который вызовет обратную передачу. Я уверен, что есть и другие способы снять шкуру с этой кошки.

У меня такой вопрос: каков наилучший способ для сайта ASP.NET на IIS 6 или 7 перенаправлять страницу http в https? Есть ли лучшая практика или все альтернативы равны?

Ответы [ 4 ]

12 голосов
/ 17 декабря 2009

Я бы использовал перезапись URL для этого. Зачем? потому что он прост в реализации, не требует изменений в приложении и прост в обслуживании.

В IIS7 это можно сделать с помощью модуля перезаписи URL , например:

<!-- http:// to https:// rule -->
<rule name="ForceHttpsBilling" stopProcessing="true">
  <match url="(.*)billing/(.*)" ignoreCase="true" />
  <conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="false" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" />
</rule>

На IIS6 вам придется использовать стороннюю библиотеку. Я использую IIRF (http://www.codeplex.com/IIRF), он бесплатный, стабильный и обладает большим количеством функций.

2 голосов
/ 17 декабря 2009

На самом деле, лучше всего делать это в одном из трех мест, предполагая, что настройки оборудования или IIS не подходят. Просто варианты кода.

  1. В модуле HTTP. HttpModules запускаются до обработки любого запроса, так что вы можете выполнить проверку URL и перенаправить туда. Это то, что я бы сделал.
  2. В Global.asax.
  3. На пользовательской базовой странице, в функции init.

Все это будет хорошим вариантом. Один и два гарантированно попадут под каждый запрос, обрабатываемый ASP.NET. Третий требует, чтобы вы убедились, что все ваши страницы наследуются от базовой страницы.

Я бы не ставил код на каждой странице, это просто плохое программирование.

Дайте мне знать, если вам нужно больше разъяснений, но это хорошее начало.

1 голос
/ 03 января 2010

Как правило, существуют определенные части сайта, которые вы всегда хотите использовать как HTTPS или HTTP.

Я использую следующий атрибут действия для преобразования трафика в один или другой:

public class ForceConnectionSchemeAttribute : ActionFilterAttribute
{
    private string scheme;

    public ForceConnectionSchemeAttribute(string scheme)
    {
        this.scheme = scheme.ToLower();
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Uri url = filterContext.HttpContext.Request.Url;
        if (url.Scheme != scheme)
        {
            string secureUrl = String.Format("{0}://{1}{2}", scheme, url.Host, url.PathAndQuery);
            filterContext.Result = new RedirectResult(secureUrl);
        }
    }
}


// Suppose I always want users to use HTTPS to access their personal info:
[ForceConnectionScheme("https")]
public class UserController: Controller
{
    // blah
}
1 голос
/ 16 декабря 2009

Я бы вызвал Response.Redirect в page_load. Это проще, чем генерирование javascript, и отправит клиенту меньше байтов.

Пример кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...