Verificar a existência de problemas relacionados com a forma canónica no ASP.NET por programação

INTRODUÇÃO
Este artigo descreve como adicionar salvaguardas a uma aplicação ASP.NET para ajudar a proteger contra problemas comuns de canonicidade.
Mais Informação

O que é a canonicidade?

A canonicidade é o processo que determina o modo como várias formas equivalentes de um nome são resolvidas para um só nome padrão. Este nome padrão único é também conhecido como nome canónico. Por exemplo, num computador específico, os nomes c:\dir\teste.dat, teste.dat e ..\..\teste.dat podem referenciar todos o mesmo ficheiro. A canonicidade é o processo que mapeia estes nomes para um nome semelhante a c:\dir\teste.dat.

Quando um URL é recebido por um servidor da Web, este mapeia o pedido para um caminho do sistema de ficheiros que determina a resposta. A rotina de colocação na forma canónica utilizada para mapear o pedido tem de analisar correctamente o URL, de forma a evitar servir ou processar conteúdo inesperado. Para obter mais informações sobre canonicidade, visite o seguinte Web site da Microsoft: Recomendamos a utilização dos procedimentos recomendados para ajudar a salvaguardar as aplicações. Para obter informações adicionais, consulte a secção seguinte.

Adicionar salvaguardas de canonicidade à aplicação Web

Os programadores do Microsoft ASP.NET podem adicionar verificações para ajudar a reduzir os problemas de canonicidade de uma aplicação Web adicionando um processador de eventos Application_BeginRequest ao ficheiro Global.asax, armazenado no directório raiz da aplicação Web. Este processador de eventos é executado para cada pedido Web. Pode adicionar código a este processador de eventos para ajudar a salvaguardar contra problemas de canonicidade.

Exemplo de código

Os exemplos de código que se seguem demonstram como adicionar um processador de eventos Application_BeginRequest a um ficheiro Global.asax. Este processador de eventos ajuda a prevenir a existência de caracteres inválidos e URLs incorrectamente formados através da execução de verificações de caminhos. Consequentemente, é possível evitar problemas de canonicidade comuns.

Exemplo de código de Global.asax (Visual Basic .NET)

<script language="vb" runat="server">Sub Application_BeginRequest(Sender as Object, E as EventArgs)    If (Request.Path.IndexOf(chr(92)) >= 0 OR _        System.IO.Path.GetFullPath(Request.PhysicalPath) <> Request.PhysicalPath) then        Throw New HttpException(404, "Not Found")    End IfEnd Sub</script>

Exemplo de código de Global.asax ( C#)

<script language="C#" runat="server">void Application_BeginRequest(object source, EventArgs e) {    if (Request.Path.IndexOf('\\') >= 0 ||        System.IO.Path.GetFullPath(Request.PhysicalPath) != Request.PhysicalPath) {        throw new HttpException(404, "not found");    }}</script>

Exclusão de responsabilidade

As informações fornecidas na base de dados de conhecimento da Microsoft (Microsoft Knowledge Base) são fornecidas "tal como estão", sem nenhum tipo de garantia. A Microsoft não oferece quaisquer garantias, expressas ou implícitas, incluindo as garantias de comercialização e adequação a um fim específico. Em nenhum caso serão a Microsoft Corporation ou os seus fornecedores responsáveis por quaisquer prejuízos, incluindo prejuízos directos, indirectos, incidentais, consequentes, prejuízos por perda de lucros negociais ou prejuízos extraordinários, ainda que a Microsoft ou os seus fornecedores tenham sido notificados da possibilidade de ocorrência de tais prejuízos. Alguns estados não permitem a exclusão ou limitação de responsabilidade por prejuízos incidentais ou consequentes. Consequentemente, a limitação acima referida pode não ser aplicável.
Propriedades

ID do Artigo: 887459 - Última Revisão: 12/03/2007 18:52:14 - Revisão: 2.6

  • Microsoft ASP.NET 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.0 Service Pack 1
  • Microsoft .NET Framework 1.0 Service Pack 2
  • Microsoft .NET Framework 1.0 Service Pack 3
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.1 Service Pack 1
  • Microsoft ASP.NET 1.0
  • kbsecurity kbtshoot KB887459
Esta informação foi útil?