Mapeando páginas HTTP para HTTPS automaticamente

Março 13, 2007 at 5:07 pm 4 comentários

A maioria das aplicações web precisam de segurança no tráfego de informações. Alguns casos no cadastro, login, dados sobre pagamento, informações pessoais, entre outras.

Para garantir que estes dados serão trafegados de forma criptografada, pode-se utilizar SSL (Security Sockets Layer). Esta utilização é básica em sites de e-commerce por exemplo, mas é sempre bom ter em mente que a sua utilização tem um overhead. Portanto, as páginas acessadas via SSL são um pouco mais lentas que as normais (embora você não vá notar isso em uma navegação comum).

A aplicação deste meio de acesso em um web site exige algumas definições:

1- Se o usuário acessar uma página que deveria ser acessada via HTTPS utilizando HTTP, o que fazer?
2- Se o contrário for feito (HTTPS quando não deveria), o que fazer?

É possível bloquear, através do IIS, o acesso a uma página que deveria ser feito via HTTPS sendo feito através de HTTP. Neste caso, uma página de erro é apresentada, informando o usuário que este acesso está errado.

Mas e se a aplicação fizesse a alteração do protocolo, de forma transparente ao usuário, sem influenciar na navegação?

Neste exemplo, a verificação de segurança é feita pela aplicação, através de mapeamento no web.config das páginas que devem ser acessadas via HTTPS. Desta maneira, quando uma página HTTPS é acessada via HTTP, a aplicação faz a troca automaticamente, sem interferir na navegação do usuário. No caso contrário, a aplicação também troca automaticamente o protocolo para HTTP.

Essa solução é prática quando existe um grande número de páginas criadas, onde esse mapeamento é constantemente alterado. A única preocupação aqui é manter o web.config atualizado (cá entre nós, é o mínimo né).

Mapeando os arquivos

Para mapear os arquivos/diretórios foi criada uma Section customizada no web.config, chamada extraSecurePages. Esta section permite indicar se o tratamento está ativo ou não (através do atributo enable), e os arquivos nos quais o acesso deverá ser verificado. É importante ressaltar que arquivos de imagens, css, entre outros, não são mapeados para o ASP.NET. 
O atributo fileRegularExpression serve para filtrar quais arquivos receberão o tratamento. No código abaixo, apenas os arquivos com extensão ASPX receberão tratamento de verificação.

Outro importante atributro é accessMode. Este atributo indica se a página deve ser acessada via HTTPs (obrigatoriamente) ou apenas via HTTP. As páginas que não estão listadas não receberão nenhum tratamento. Se o usuário alterar o protocolo para HTTP ou HTTPS, a página irá ser executada normalmente, sem trocar de protocolo.

Neste exemplo, o diretório Pagamento inteiro está mapeado mas a página Carrinho.aspx deste diretório está mapeada para não ser acessada via HTTPS (duas últimas linhas).

Tratando a requisição

Para receber a requisição e verificar o tratamento necessário, foi utilizado um HttpModule, ExtraSecureModule. Esta classe é responsável por receber a requisição, verificar qual a configuração para a página e acessar do modo correto, se necessário.

O código que faz a verificação pode ser visto nos arquivos anexados a este post (lá no final).  

Registrando o HttpModule no Web.Config

Depois que criar o código, basta indicar pra aplicação que o novo HttpModule deve ser executado também. Para isso, basta inserir a linha no web.config, na section httpModules, conforme abaixo:

<httpModules>

<add name=”SiteModule” type=”ExtraCommerceSite.SiteModule”/>
<add name=”ExtraSecureModule” type=”CustomComponents.Configuration.ExtraSecureModule” />


</httpModules>

Depois disso, o método Init do HttpModule é executado, e toda a verificação é feita.

Baixe aqui o arquivo ExtraSecureModule.cs.zip.

Abraços!

Anúncios

Entry filed under: .NET.

Ó Senhor… Diga não ao throw!

4 comentários Add your own

  • 1. Márcio Duarte  |  Abril 7, 2008 às 8:34 pm

    Só um problema: ExtraSecurePagesSection definida no arquivo ExtraSecureModule.cs está definida onde?

    ABS

    Responder
  • 2. André Nobre  |  Abril 7, 2008 às 9:01 pm

    Márcio,
    este arquivo está definido no namespace CustomComponents.Configuration, mas você pode definir onde quiser, e referenciar no projeto web, arquivo web.config.

    Abraços

    Responder
  • 3. Paulo  |  Novembro 13, 2008 às 8:44 pm

    Muito Bom!

    Responder
  • 4. somarcio  |  Março 17, 2012 às 2:29 pm

    Boa tarde, estou com uma dúvida… meu site é em WordPress, como fazer este mesmo processo, só que no PHP.

    Baixei este plugin http://wordpress.org/extend/plugins/wordpress-https/screenshots/ porém não obtive resultado nenhum!!

    Precisa fazer algum outro processo pra obter links em “https”.

    Obrigado

    Responder

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Calendário

Março 2007
S T Q Q S S D
« Jan   Abr »
 1234
567891011
12131415161718
19202122232425
262728293031  

Most Recent Posts


%d bloggers like this: