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 TownsendNeste 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.