Около 6 месяцев назад я развернул сайт, где каждый запрос должен был быть через https. В то время я мог найти единственный способ убедиться, что каждый запрос к странице превышал https, - это проверить это в событии загрузки страницы. Если бы запрос не был через http, я бы ответил response.redirect (" https://example.com ")
Есть ли лучший способ - в идеале, некоторые настройки в web.config?
Ответы:
Пожалуйста, используйте HSTS (HTTP Strict Transport Security)
от http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Оригинальный ответ (заменен вышеуказанным 4 декабря 2015 г.)
в принципе
это будет идти в global.asax.cs (или global.asax.vb)
я не знаю, как указать это в web.config
источник
Другая вещь, которую вы можете сделать, это использовать HSTS , возвращая заголовок «Strict-Transport-Security» в браузер. Браузер должен поддерживать это (и в настоящее время это в первую очередь Chrome и Firefox), но это означает, что после установки браузер не будет отправлять запросы на сайт по HTTP и вместо этого будет переводить их в запросы HTTPS перед их выдачей. , Попробуйте это в сочетании с перенаправлением из HTTP:
Браузеры, которые не знают HSTS, будут просто игнорировать заголовок, но все равно будут захвачены оператором switch и отправлены в HTTPS.
источник
if(!Request.IsLocal)
чтобы он не нарушал отладку.Модуль IIS7 позволит вам перенаправить.
источник
Для тех, кто использует ASP.NET MVC. Вы можете использовать следующее для принудительной установки SSL / TLS через HTTPS на весь сайт двумя способами:
Трудный путь
1 - Добавьте атрибут RequireHttpsAttribute к глобальным фильтрам:
2 - Принудительно использовать токены Anti-Forgery для использования SSL / TLS:
3 - Требовать, чтобы Cookies требовали HTTPS по умолчанию, изменив файл Web.config:
4 - Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода, чтобы включить Strict Transport Security для всего сайта. Не забудьте добавить директиву Preload ниже и отправить свой сайт на сайт HSTS Preload . Больше информации здесь и здесь . Обратите внимание, что если вы не используете OWIN, существует метод Web.config, о котором вы можете прочитать на сайте NWebSec .
5 - Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода, чтобы включить закрепление с открытым ключом (HPKP) на сайте. Больше информации здесь и здесь .
6 - Включите схему https в любой используемый URL. HTTP-заголовок Content Security Policy (CSP) и Subresource Integrity (SRI) не работают хорошо, когда вы имитируете схему в некоторых браузерах. Лучше быть явно о HTTPS. например
Легкий путь
Используйте шаблон проекта ASP.NET MVC Boilerplate Visual Studio для создания проекта со всем этим и многим другим встроенным. Вы также можете просмотреть код на GitHub .
источник
<authentication mode="Forms">
внутри вы должны иметь<forms requireSSL="true">
RequireHttpsAttribute
Делает редирект. Пока у вас есть, это должно быть хорошо.Если по какой-либо причине вы не можете настроить это в IIS, я бы сделал HTTP-модуль, который будет перенаправлять вас:
Затем просто скомпилируйте его в DLL, добавьте в качестве ссылки на ваш проект и поместите в web.config:
источник
app.BeginRequest += new OnBeginRequest;
вInit
методе и в том,OnBeginRequest
что содержит текущийInit
метод. Вы уверены, что этот модуль работает как положено?Что вам нужно сделать, это:
1) Добавьте ключ внутри web.config, в зависимости от производственного или промежуточного сервера, как показано ниже
2) Внутри вашего файла Global.asax добавьте ниже метод.
источник
Если поддержка SSL не настраивается на вашем сайте (т. Е. Должна быть возможность включать / выключать https) - вы можете использовать атрибут [RequireHttps] для любого действия контроллера / контроллера, которое вы хотите защитить.
источник
Это также зависит от марки вашего балансировщика, для веб-мультиплексора вам потребуется поискать заголовок http,
X-WebMux-SSL-termination: true
чтобы понять, что входящий трафик был ssl. Подробности здесь: http://www.cainetworks.com/support/redirect2ssl.htmlисточник
Для @Joe выше: «Это дает мне цикл перенаправления. До того, как я добавил код, он работал нормально. Есть предложения? - Джо 8 ноября '11 в 4:13»
Это происходило и со мной, и я думаю, что происходило то, что балансировщик нагрузки завершал запрос SSL перед веб-сервером. Итак, мой веб-сайт всегда думал, что запрос был «http», даже если оригинальный браузер запрашивал, чтобы он был «https».
Я признаю, что это немного глупо, но для меня сработало создание свойства JustRedirected, которое я мог использовать, чтобы выяснить, что человек уже был перенаправлен один раз. Итак, я проверяю определенные условия, которые требуют перенаправления, и, если они выполняются, я устанавливаю это свойство (значение, сохраненное в сеансе) до перенаправления. Даже если условия http / https для перенаправления выполняются во второй раз, я обхожу логику перенаправления и сбрасываю значение сеанса JustRedirected на false. Вам понадобится ваша собственная логика условного тестирования, но вот простая реализация свойства:
источник
Я добавлю два цента. Если у вас есть доступ к IIS-серверу, вы можете принудительно установить HTTPS с помощью привязок протокола. Например, у вас есть сайт под названием Blah . В IIS вы можете настроить два сайта: Blah и Blah (Redirect) . Для Blah настройте только
HTTPS
привязку (и,FTP
если вам нужно, убедитесь, что она также принудительно установлена через безопасное соединение). Для Blah (Redirect) только настройтеHTTP
привязку. Наконец, в разделе HTTP Redirect для Blah (Redirect) убедитесь, что установлен редирект 301https://blah.com
, с точным назначением включен. Убедитесь, что каждый сайт в IIS указывает на егособственная корневая папка, иначе Web.config все испортит. Также убедитесь, чтоHSTS
настроенный на вашем HTTPS-сайте, чтобы последующие запросы браузера всегда были принудительно настроены на HTTPS, и перенаправления не происходили.источник
Это более полный ответ, основанный на @Troy Hunt's. Добавьте эту функцию в ваш
WebApplication
класс вGlobal.asax.cs
:(Чтобы включить SSL в локальной сборке, включите его в доке свойств проекта)
источник
-> Просто ДОБАВЬТЕ [RequireHttps] поверх открытого класса HomeController: Controller.
-> И добавить GlobalFilters.Filters.Add (new RequireHttpsAttribute ()); в методе protected void Application_Start () в файле Global.asax.cs.
Что заставляет все ваше приложение к HTTPS.
источник
Я потратил некоторое время на поиски лучших практик, которые имеют смысл, и нашел следующее, которое сработало для меня. Я надеюсь, что это спасет вас когда-нибудь.
Использование файла конфигурации (например, веб-сайт asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- выше /
или на вашем собственном сервере https://www.sslshopper.com/iis7-redirect-http-to-https.html
[КОРОТКИЙ ОТВЕТ] Просто код ниже идет внутрь
источник
В IIS10 (Windows 10 и Server 2016), начиная с версии 1709, появилась новая, более простая опция для включения HSTS для веб-сайта.
Microsoft опишет преимущества нового подхода здесь и предоставляет множество различных примеров того, как реализовать изменение программно или путем непосредственного редактирования файла ApplicationHost.config (который похож на web.config, но работает на уровне IIS, а не на уровне отдельного сайта). ). ApplicationHost.config можно найти в C: \ Windows \ System32 \ inetsrv \ config.
Я изложил два примера методов здесь, чтобы избежать гниения ссылок.
Способ 1. Редактируйте файл ApplicationHost.config напрямую. Между
<site>
тегами добавьте эту строку:Способ 2 - Командная строка: Выполните следующее из командной строки с повышенными правами (т.е. щелкните правой кнопкой мыши на CMD и запустите от имени администратора). Не забудьте поменять Contoso на имя вашего сайта, как оно отображается в IIS Manager.
Другие методы, которые Microsoft предлагает в этих статьях, могут оказаться более подходящими, если вы находитесь в размещенной среде, где у вас ограниченный доступ.
Имейте в виду, что версия IIS10 1709 доступна для Windows 10 сейчас, но для Windows Server 2016 она находится на другой дорожке выпуска и не будет выпущена как исправление или пакет обновления. Смотрите здесь для деталей о 1709.
источник
Если вы используете ASP.NET Core, вы можете попробовать пакет nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Тогда вам нужно только добавить
Это также добавит заголовок HTTP StrictTransportSecurity ко всем запросам, сделанным по схеме https.
Пример кода и документация https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
источник