Há cerca de 6 meses, desenvolvi um site em que todas as solicitações precisavam ser feitas em https. A única maneira que encontrei para garantir que todas as solicitações para uma página terminassem em https era verificá-la no evento de carregamento da página. Se a solicitação não tivesse terminado em http, seria response.redirect (" https://example.com ")
Existe uma maneira melhor - idealmente, alguma configuração no web.config?
Respostas:
Por favor, use HSTS (HTTP Strict Transport Security)
de http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Resposta original (substituída pela acima em 4 de dezembro de 2015)
basicamente
que iria no global.asax.cs (ou global.asax.vb)
Eu não sei de uma maneira de especificá-lo no web.config
fonte
A outra coisa que você pode fazer é usar o HSTS retornando o cabeçalho "Strict-Transport-Security" ao navegador. O navegador precisa oferecer suporte a isso (e atualmente, é principalmente o Chrome e o Firefox), mas isso significa que, uma vez definido, o navegador não fará solicitações ao site por HTTP e, em vez disso, as converterá em solicitações HTTPS antes de emiti-las . Tente isso em combinação com um redirecionamento do HTTP:
Os navegadores que não estão cientes do HSTS apenas ignoram o cabeçalho, mas ainda são pegos pela instrução switch e enviados para HTTPS.
fonte
if(!Request.IsLocal)
para que não interrompa a depuração.O módulo IIS7 permitirá redirecionar.
fonte
Para aqueles que usam o ASP.NET MVC. Você pode usar o seguinte para forçar SSL / TLS sobre HTTPS em todo o site de duas maneiras:
O jeito difícil
1 - Adicione RequireHttpsAttribute aos filtros globais:
2 - Forçar tokens antifalsificação a usar SSL / TLS:
3 - Exija que os cookies exijam HTTPS por padrão, alterando o arquivo Web.config:
4 - Use o pacote NWebSec.Owin NuGet e adicione a seguinte linha de código para habilitar o Strict Transport Security em todo o site. Não se esqueça de adicionar a diretiva de pré-carregamento abaixo e enviar seu site para o site de pré-carregamento do HSTS . Mais informações aqui e aqui . Observe que, se você não estiver usando o OWIN, existe um método Web.config que você pode ler no site NWebSec .
5 - Use o pacote NWebSec.Owin NuGet e adicione a seguinte linha de código para ativar a Public Key Pinning (HPKP) em todo o site. Mais informações aqui e aqui .
6 - Inclua o esquema https em qualquer URL usado. O cabeçalho HTTP da Política de Segurança de Conteúdo (CSP) e o SRI (Subresource Integrity) não são bons quando você imita o esquema em alguns navegadores. É melhor ser explícito sobre HTTPS. por exemplo
O caminho fácil
Use o modelo de projeto do ASP.NET MVC Boilerplate Visual Studio para gerar um projeto com tudo isso e muito mais incorporado. Você também pode exibir o código no GitHub .
fonte
<authentication mode="Forms">
, dentro de você deve ter<forms requireSSL="true">
RequireHttpsAttribute
faz o redirecionamento. Contanto que você tenha que deve ficar bem.Se você não conseguir configurar isso no IIS por qualquer motivo, eu faria um módulo HTTP que faça o redirecionamento para você:
Em seguida, compile-o em uma DLL, adicione-o como referência ao seu projeto e coloque-o no web.config:
fonte
app.BeginRequest += new OnBeginRequest;
noInit
método e noOnBeginRequest
que contém o que oInit
método atual contém. Tem certeza de que este módulo funciona conforme o esperado?O que você precisa fazer é:
1) Adicione uma chave dentro do web.config, dependendo do servidor de produção ou estágio, como abaixo
2) Dentro do seu arquivo Global.asax, adicione o método abaixo.
fonte
Se o suporte a SSL não for configurável no seu site (por exemplo, você deve ativar / desativar o https) - você pode usar o atributo [RequireHttps] em qualquer ação do controlador / controlador que deseja proteger.
fonte
Também depende da marca do seu balanceador. Para o mux da web, você precisaria procurar o cabeçalho http
X-WebMux-SSL-termination: true
para descobrir que o tráfego recebido era ssl. detalhes aqui: http://www.cainetworks.com/support/redirect2ssl.htmlfonte
Para @ Joe acima, "Isso está me dando um loop de redirecionamento. Antes de adicionar o código, ele funcionava bem. Alguma sugestão? - Joe 8 / Nov / 11 às 4:13"
Isso estava acontecendo comigo também e o que eu acredito que estava acontecendo é que havia um balanceador de carga finalizando a solicitação SSL na frente do servidor Web. Portanto, meu site sempre achava que a solicitação era "http", mesmo que o navegador original solicitasse "https".
Admito que isso é um pouco invasivo, mas o que funcionou para mim foi implementar uma propriedade "JustRedirected" que eu poderia aproveitar para descobrir que a pessoa já foi redirecionada uma vez. Portanto, testo condições específicas que justificam o redirecionamento e, se elas forem atendidas, defino essa propriedade (valor armazenado na sessão) antes do redirecionamento. Mesmo que as condições http / https para redirecionamento sejam atendidas pela segunda vez, ignoro a lógica de redirecionamento e redefino o valor da sessão "JustRedirected" para false. Você precisará de sua própria lógica de teste condicional, mas aqui está uma implementação simples da propriedade:
fonte
Vou jogar meus dois centavos. Se você tiver acesso ao lado do servidor IIS, poderá forçar o HTTPS usando as ligações de protocolo. Por exemplo, você tem um site chamado Blah . No IIS, você configuraria dois sites: Blah e Blah (Redirect) . Para Blah, configure apenas a
HTTPS
ligação (e,FTP
se necessário, certifique-se de forçá-la também por uma conexão segura). Para Blah (Redirecionar), configure apenas aHTTP
ligação. Por fim, na seção Redirecionamento HTTP para Blá (Redirecionar), defina um redirecionamento 301 para a própria pasta raiz, caso contrário, o Web.confighttps://blah.com
, com o destino exato ativado. Verifique se cada site no IIS está apontando para elevai ficar tudo ferrado. Verifique também se vocêHSTS
configurou no site HTTPSed para que solicitações subsequentes do navegador sejam sempre forçadas a HTTPS e não ocorram redirecionamentos.fonte
Esta é uma resposta mais completa baseada no @Troy Hunt's. Adicione esta função à sua
WebApplication
turma emGlobal.asax.cs
:(Para ativar o SSL em sua construção local, ative-o na doca Propriedades do projeto)
fonte
-> Basta adicionar [RequireHttps] em cima da classe pública HomeController: Controller.
-> E adicione GlobalFilters.Filters.Add (new RequireHttpsAttribute ()); no método 'void protegido Application_Start ()' no arquivo Global.asax.cs.
O que força seu aplicativo inteiro a HTTPS.
fonte
Passei algum tempo procurando as melhores práticas que faziam sentido e encontrei o seguinte que funcionou perfeito para mim. Espero que isso lhe salve algum dia.
Usando o arquivo Config (por exemplo, um site asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- superior/
ou em seu próprio servidor https://www.sslshopper.com/iis7-redirect-http-to-https.html
[RESPOSTA RESUMIDA] Simplesmente o código abaixo aparece
fonte
No IIS10 (Windows 10 e Server 2016), a partir da versão 1709, existe uma nova opção mais simples para ativar o HSTS para um site.
A Microsoft descreve as vantagens da nova abordagem aqui e fornece muitos exemplos diferentes de como implementar a alteração programaticamente ou editando diretamente o arquivo ApplicationHost.config (semelhante ao web.config, mas opera no nível do IIS, em vez do nível do site individual ) O ApplicationHost.config pode ser encontrado em C: \ Windows \ System32 \ inetsrv \ config.
Eu descrevi dois dos métodos de exemplo aqui para evitar a podridão do link.
Método 1 - Edite o arquivo ApplicationHost.config diretamente Entre as
<site>
marcas, adicione esta linha:Método 2 - Linha de Comando: Execute o seguinte em um prompt de comando elevado (ou seja, clique com o botão direito do mouse no CMD e execute como administrador). Lembre-se de trocar a Contoso pelo nome do seu site, conforme exibido no Gerenciador do IIS.
Os outros métodos que a Microsoft oferece nesses artigos podem ser melhores opções se você estiver em um ambiente hospedado em que você tenha acesso limitado.
Lembre-se de que o IIS10 versão 1709 está disponível no Windows 10 agora, mas para o Windows Server 2016 ele está em uma faixa de versão diferente e não será lançado como um patch ou service pack. Veja aqui para detalhes sobre 1709.
fonte
Se você estiver usando o ASP.NET Core, poderá experimentar o pacote de nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Então você só precisa adicionar
Isso também adicionará o cabeçalho HTTP StrictTransportSecurity a todas as solicitações feitas usando o esquema https.
Exemplo de código e documentação https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
fonte