ASP.NET: лучшая практика для перенаправления к https

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

Я могу сделать Ответ. Перенаправление в page_load событии. Я могу записать JavaScript, который обновит location.href, который вызовет обратную передачу. Я уверен, что существует больше способов освежевать эту кошку.

Мой вопрос, какова лучшая практика для сайта ASP.NET на IIS 6 или 7 для перенаправления http страницы к https? Существует ли лучшая практика, или все альтернативы равны?

8
задан Justin C 16 December 2009 в 20:48
поделиться

4 ответа

Для этого я бы использовал перезапись 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 ), он бесплатный, стабильный и имеет большое количество функций.

12
ответ дан 5 December 2019 в 10:41
поделиться

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

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

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

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

Дайте мне знать, если вам нужны дополнительные разъяснения,

2
ответ дан 5 December 2019 в 10:41
поделиться

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

Пример кода

1
ответ дан 5 December 2019 в 10:41
поделиться

В общем, есть определенные части сайта, которые вы либо хотите, чтобы всегда был 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
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: