Cuidado com o uso de server.transfer no ASP.NET - Búfalo Informática
Dica No : 581
Titulo: Cuidado com o uso de server.transfer no ASP.NET
O server.transfer gera um resultado equivalente ao response.redirect : Transfere a execução para outra página.
Porém os dois trabalham de forma completamente diferente. O response.Redirect envia para o client um pedido para que este se desvie para outra página. O client então requisita ao servidor a outra página.
Por sua vez, o server.transfer trabalha apenas no servidor. Quando é executado, o servidor se encarrega de pedir a nova página, evitando a comunicação com o client e o client nem ao menos sabe que houve um desvio.
No ASP a diferença implicou em melhor de performance : Evitando a comunicação com o client se tornou mais rápido realizar um server.transfer do que um response.redirect.
Mas agora com o ASP.NET surgiram novos problemas. O sistema de autorização do ASP.NET roda automaticamente, identificando o usuário a cada chamada e verificando a quais páginas ele tem acesso. Isso acontece independentemente do sistema de autenticação (windows/forms/passport).
Mas a autorização do usuário é feita no evento Application_authenticateRequest, que acontece durante o processo de inicio da chamada de uma URL. Então temos um problema : Quando usamos server.transfer, não existe chamada para nova URL, a execução é transferida apenas dentro do servidor.
Com isso não existe evento application_authenticaterequest e, como vocês já devem estar imaginando, não existe autorização.
Consequentemente, o uso de server.transfer no código pode fazer com que um usuário consiga ver dados de uma página a qual ele não tem acesso. Configurar o Web.Config não resolverá, pois os eventos de autorização não são rodados neste caso.