Лучший способ в asp.net заставить HTTPS для всего сайта? - PullRequest
177 голосов
/ 06 сентября 2008

Около 6 месяцев назад я развернул сайт, где каждый запрос должен был быть через https. В то время я мог найти единственный способ убедиться, что каждый запрос к странице превышал https, это проверить это в событии загрузки страницы. Если бы запрос не был через http, я бы ответил response.redirect ("https://example.com")

Есть ли лучший способ - в идеале, некоторые настройки в web.config?

Ответы [ 15 ]

2 голосов
/ 16 ноября 2010

Это также зависит от марки вашего балансировщика, для веб-мультиплексора вам потребуется поискать заголовок http X-WebMux-SSL-termination: true, чтобы определить, что входящий трафик был ssl. Подробности здесь: http://www.cainetworks.com/support/redirect2ssl.html

1 голос
/ 08 сентября 2018

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

Использование Файл конфигурации (например, веб-сайт asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and-higher/

или на вашем собственном сервере https://www.sslshopper.com/iis7-redirect-http-to-https.html

[КОРОТКИЙ ОТВЕТ] Просто код ниже идет внутрь

<system.webServer> 
 <rewrite>
     <rules>
       <rule name="HTTP/S to HTTPS Redirect" enabled="true" 
           stopProcessing="true">
       <match url="(.*)" />
        <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
        redirectType="Permanent" />
        </rule>
       </rules>
 </rewrite>
1 голос
/ 13 марта 2016

-> Просто добавьте [RequireHttps] поверх общедоступного класса HomeController: Controller.

-> И добавить GlobalFilters.Filters.Add (new RequireHttpsAttribute ()); в методе protected void Application_Start () в файле Global.asax.cs.

Что заставляет все ваше приложение к HTTPS.

0 голосов
/ 24 ноября 2018

В IIS10 (Windows 10 и Server 2016), начиная с версии 1709, существует новая, более простая опция для включения HSTS для веб-сайта.

Microsoft описывает преимущества нового подхода здесь и предоставляет много разных примеров того, как реализовать изменение программно или путем непосредственного редактирования файла ApplicationHost.config (который похож на web.config, но работает в уровень IIS, а не индивидуальный уровень сайта). ApplicationHost.config находится в C: \ Windows \ System32 \ inetsrv \ config.

Я обрисовал в общих чертах два примера методов, чтобы избежать гниения ссылок.

Метод 1 - редактирование файла ApplicationHost.config напрямую Между тегами <site> добавьте эту строку:

<hsts enabled="true" max-age="31536000" includeSubDomains="true" redirectHttpToHttps="true" />

Метод 2 - Командная строка: Выполните следующее из командной строки с повышенными правами (т.е. щелкните правой кнопкой мыши на CMD и запустите от имени администратора). Не забудьте поменять Contoso на имя вашего сайта, как оно отображается в IIS Manager.

c:
cd C:\WINDOWS\system32\inetsrv\
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.enabled:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.max-age:31536000" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.includeSubDomains:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.redirectHttpToHttps:True" /commit:apphost

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

Имейте в виду, что версия IIS10 1709 теперь доступна для Windows 10, но для Windows Server 2016 она находится на другой дорожке выпуска и не будет выпущена как исправление или пакет обновления. См. здесь для получения подробной информации о 1709.

0 голосов
/ 23 марта 2017

Если вы используете ASP.NET Core, вы можете попробовать пакет nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.

Тогда вам нужно только добавить

app.UseHttpsWithHsts(HttpsMode.AllowedRedirectForGet, configureRoutes: routeAction);

Это также добавит заголовок HTTP StrictTransportSecurity ко всем запросам, сделанным по схеме https.

Пример кода и документация https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code

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