Desenvolvimento - ASP. NET

Segurança ASP.NET: HttpModules

Neste artigo implementarei um conceito de segurança baseado em permitir que um determinado usuário possa acessar ou não uma determinada página. Tudo isso através dos HttpModules.

por Cristian Arrano Townsend



Quem desenvolve aplicações web sabe que muitas vezes é necessário preocupar-se com a segurança do sistema. E uma das preocupações que envolve a segurança de um sistema é a autorização do mesmo.

Neste artigo implementarei um conceito de segurança baseado em permitir que um determinado usuário possa acessar ou não uma determinada página. Tudo isso através dos HttpModules.

Os HttpModules são aplicações (ou mais bem scripts) que executam certas ações para cada request ou response em uma aplicação asp.net.

Para ilustrar melhor, irei demostrar com um exemplo bastante simples. O objetivo é negar o acesso a algumas páginas dentro de uma determinada aplicação web.

Para isso vamos colocar num ArrayList nas páginas que vamos negar o acesso. O exemplo terá 3 Web Forms:

  • Default.aspx (Página principal da nossa aplicação)
  • Default2.aspx (Página que terá o acesso negado)
  • AcessoNegado.aspx (Página que o usuário vera quando ter o acesso negado)

Em seguida, vamos inserir uma classe chamada CheckUserAccess.vb na aplicação web. Essa classe implementará a interface IhttpModule. Tal interface contém os metodos Dispose e Init.

No metodo Init da classe, iremos implementar o Init da Interface IhttpModule. E dentro do Metodo, vamos "conectar" o evento BeginRequest ao metodo MyBeginRequest, como mostra o codigo abaixo.

Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init
        AddHandler app.BeginRequest, AddressOf MyBeginRequest
End Sub

Abaixo é mostrado o código do metodo MyBeginRequest.

Public Sub MyBeginRequest(ByVal s As Object, ByVal e As EventArgs)
  Dim app As HttpApplication
  app = CType(s, HttpApplication)
  Dim actPage As String = app.Request.ServerVariables("URL").ToUpper.Trim
End Sub

Com o código mostrado acima já temos acesso a pagina atual. Sem adicionar uma linha sequer de codigo nos Web Forms.

Agora adicionaremos um ArrayList para listar as páginas que terão acesso negado, como mostra o codigo abaixo inserido no Sub Init:

arrSecPages.Add("/WebAppHttpModule/Default2.aspx".Trim.ToUpper)

O arrSecPages é um ArrayList que foi adicionado como público no topo da classe.

Para saber se a nossa página em que estamos tem o acesso negado ou não, colocamos um If perguntando se a página atual faz parte do ArrayList.

If arrSecPages.Contains(actPage) Then
app.Response.Redirect("AcessoNegado.aspx")
End If

Caso faça parte do ArrayList, o usuario é redirecionado para o Web Form "AcessoNegado.aspx".

Agora que temos a nossa classe implementada, precisamos vinculá -la a nossa aplicação web. Para isso, basta adicionar algumas linhas no arquivo de configuração Web.Config da nossa aplicação, dentro da parte System.Web.

<httpModules>
<add type="WebAppHttpModule.CheckUserAccess,WebAppHttpModule" name="WebAppHttpModule" />
</httpModules>

onde WebAppHttpModule é o nome da aplicação Web.

Agora basta testar a aplicação, passando pela pagina Default.aspx e depois tentando entrar na pagina Default2.aspx.

Boa sorte.

Cristian Arrano Townsend

Cristian Arrano Townsend - Trabalha há 12 anos com desenvolvimento de software. Atualmente trabalha como consultor da FCAMARA em Curitiba, trabalhando com .NET, Metodologias Ágeis e Sharepoint. Possui algumas certificações Microsoft .NET e é Certified Scrum Master