Я искал вокруг Google и StackOverflow, пытаясь найти решение этой проблемы, но все они, похоже, относятся к ASP.NET и т. Д.
Я обычно запускаю Linux на своих серверах, но для этого одного клиента я использую Windows с IIS 7.5 (и Plesk 10). Именно поэтому я немного незнаком с файлами IIS и web.config . В .htaccess
файле вы можете использовать условия перезаписи, чтобы определить, является ли протокол HTTPS, и соответственно перенаправить. Есть ли простой способ добиться этого с помощью файла web.config или даже с помощью установленного мной модуля ' URL Rewrite '?
У меня нет опыта работы с ASP.NET, поэтому, если это связано с решением, пожалуйста, включите четкие шаги по реализации.
Причина, по которой я делаю это с web.config, а не с PHP, заключается в том, что я хотел бы использовать HTTPS для всех ресурсов сайта.
Ответы:
Вам нужен модуль перезаписи URL, предпочтительно v2 (у меня не установлен v1, поэтому я не могу гарантировать, что он будет работать там, но должен).
Вот пример такого web.config - он заставит HTTPS для ВСЕХ ресурсов (используя 301 Permanent Redirect):
PS Это конкретное решение не имеет ничего общего с ASP.NET/PHP или любой другой технологией, поскольку оно выполняется только с использованием модуля перезаписи URL - оно обрабатывается на одном из начальных / более низких уровней - до того, как запрос достигнет точки, где ваш код исполняется.
источник
Strict-Transport-Security
заголовок: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
к<match url="http://*.*" />
Для тех, кто использует ASP.NET MVC. Вы можете использовать RequireHttpsAttribute, чтобы все ответы были HTTPS:
Другие вещи, которые вы также можете сделать, чтобы защитить свой сайт:
Принудительно использовать токены Anti-Forgery для использования SSL / TLS:
Требовать, чтобы Cookies требовали HTTPS по умолчанию, изменив файл Web.config:
Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода для включения строгой транспортной безопасности (HSTS) на сайте. Не забудьте добавить директиву Preload ниже и отправить свой сайт на сайт HSTS Preload . Больше информации здесь и здесь . Обратите внимание, что если вы не используете OWIN, существует метод Web.config, о котором вы можете прочитать на сайте NWebSec .
Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода, чтобы включить закрепление с открытым ключом (HPKP) на сайте. Больше информации здесь и здесь .
Включите схему https в любой используемый URL. HTTP-заголовок Content Security Policy (CSP) и Subresource Integrity (SRI) не очень удобны, когда вы имитируете схему в некоторых браузерах. Лучше быть явно о HTTPS. например
Используйте шаблон проекта ASP.NET MVC Boilerplate Visual Studio для создания проекта со всем этим и многим другим встроенным. Вы также можете просмотреть код на GitHub .
источник
Чтобы дополнить ответ LazyOne, вот аннотированная версия ответа.
Очистите все остальные правила, которые могут быть уже определены на этом сервере. Создайте новое правило, которое мы назовем «Перенаправить все запросы на https». После обработки этого правила не обрабатывайте больше правил! Сопоставьте все входящие URL. Затем проверьте, выполняются ли все эти другие условия: HTTPS выключен. Ну, это только одно условие (но убедитесь, что это правда). Если это так, отправьте перманентное перенаправление 301 обратно клиенту по адресу
http://www.foobar.com/whatever?else=the#url-contains
. Не добавляйте строку запроса в конце этого, потому что это дублирует строку запроса!Это то, что означают свойства, атрибуты и некоторые значения.
MatchAll
) или любое из условий должно быть истинным (MatchAny
); похож на И против ИЛИ.match
иconditions
все это правда.redirect
(на стороне клиента) илиrewrite
(на стороне сервера).https://
с двумя переменными сервера.url
или нет; в этом случае мы устанавливаем значение false, потому что оно{REQUEST_URI}
уже включено.Переменные сервера
{HTTPS}
который либоOFF
илиON
.{HTTP_HOST}
естьwww.mysite.com
и{REQUEST_URI}
включает в себя остальную часть URI, например/home?key=value
#fragment
(см. комментарий от LazyOne).Смотрите также: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
источник
/home?key=value#fragment
) не установлен на сервере браузерами, так как он предназначен для локального использования.http://www.example.com/members#oops
запроса будет отправлен,http://www.example.com/members
который затем будет перенаправлен на версию HTTPS вhttps://www.example.com/members
- браузер сделает все остальное)Принятый ответ не работал для меня. Я следовал за шагами в этом блоге .
Ключевым моментом, который мне не хватало, было то, что мне нужно было загрузить и установить инструмент перезаписи URL для IIS. Я нашел это здесь . Результат был следующий.
источник
В .Net Core следуйте инструкциям по адресу https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl.
В вашем файле startup.cs добавьте следующее:
Чтобы перенаправить Http в Https, добавьте следующее в startup.cs
источник
Отличная библиотека NWebsec может обновить ваши запросы с HTTP на HTTPS, используя свой
upgrade-insecure-requests
тег вWeb.config
:источник
Мне не разрешили установить URL Rewrite в моей среде, поэтому я нашел другой путь.
Добавление этого к моему web.config добавило переписывание ошибок и работало на IIS 7.5:
Затем, следуя совету здесь: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Я создал HTML-файл, который выполняет перенаправление (redirectToHttps.html):
Я надеюсь, что кто-то найдет это полезным, так как я не смог найти все части в одном месте в другом месте.
источник
Простой способ это сказать IIS , чтобы отправить пользовательский файл ошибок для HTTP запросов. Затем файл может содержать мета-перенаправление, JavaScript-перенаправление и инструкции со ссылкой и т. Д. Важно отметить, что вы все равно можете отметить «Требовать SSL» для сайта (или папки), и это будет работать.
источник