Como revisar código ASP para a vulnerabilidade de CSSI

Traduções deste artigo Traduções deste artigo
ID do artigo: 253119 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Este artigo descreve como identificar e correto aplicativos Active Server Pages (ASP) que são suscetíveis a intersites CSSI (scripts segurança problemas). Única entrada que não corretamente é validada ou formatada torna seu aplicativo vulnerável a ataques.

Mais Informações

As etapas a seguir ajudam a identificar e corrigir aplicativos ASP que são suscetíveis a CSSI:
  1. Procure o código ASP que gere HTML a ser exibido. ASP grava HTML a saída de duas maneiras:
    Response.Write
    					
    - e -
    <% =
    					
  2. Determine se a saída HTML inclui parâmetros de entrada. Esses parâmetros podem vir de uma variedade de fontes. A lista a seguir inclui fontes de entrada comuns:

    Recolher esta tabelaExpandir esta tabela
    Fonte de entradaExemplo do método de acesso do código ASP
    Coleção Request.Form
    Response.Write Request.Form("username")
    									
    Coleção de Request.QueryString
    <%=Request.QueryString("username")%>
    									
    Response.Write Request.QueryString("username")
    									
    <a href="http://mysite/showuser.asp?username=<% = 
    Request.QueryString("username") %>">mypage</a>
    									
    <a href="http://mysite/mypage.asp"><%=Request.QueryString("url")%></a>
    									
    Objeto de solicitação
    Response.Write("username")
    									
    Bancos de dados / métodos de acesso de dados
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Coleção de cookies
    Response.Write Request.Cookie("username")
    									
    Sessão e variáveis de aplicativo
    Response.Write Session("username")
    									
  3. Quando você encontrar código ASP que gere HTML usando alguma entrada, você precisará avaliar soluções para seu aplicativo específico. As soluções abaixo apresentam alguns conceitos gerais para ajudar a começar a prevenção de CSSI.

    Por favor Observe que, quando a filtragem ou codificação, você precisa especificar um caractere definido para suas páginas da Web garantir que o filtro está verificando os caracteres especiais apropriados. Os dados inseridos em suas páginas da Web devem filtrar seqüências de bytes que são consideradas especiais com base no conjunto de caracteres específicos (charset). Um charset popular é ISO 8859-1, que é o padrão em versões anteriores de HTML e HTTP. Você deve levar em conta problemas de localização quando você altera esses parâmetros.
    • Use o método HTMLEncode para codificar parâmetros de entrada ao gerar exibição.

      Em geral, a maioria dos ataques CSSI podem ser evitadas simplesmente usando HTMLEncode em parâmetros de entrada. Usando HTMLEncode funciona, substituindo os caracteres que têm um significado especial em HTML para HTML variáveis que representam esses caracteres; (por exemplo, & = &, "="). Por favor, observe que somente os dados precisam ser codificados e não as seqüências de caracteres completas.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER pode ser usado para limitar o domínio do qual as solicitações podem ser enviadas.

      HTTP_REFERER retorna uma seqüência que contém o URL da solicitação original quando ocorreu um redirecionamento. Os servidores da Web podem verificar o campo Referenciador quando receber um formulário preenchido no e rejeitá-lo se não é fornecido no local correto. Você pode verificar o HTTP_REFERER da seguinte maneira:
         <%
         If (Request.ServerVariables("HTTP_REFERER") = "") Or _
            (Left(Request.ServerVariables("HTTP_REFERER"),42) <> _
            "http://www.myserver.com/AppDir/mainfrm.asp") Then
            Response.Redirect "http://www.myserver.com/AppDir/mainfrm.asp"
         End If
         %> 
      							
      Observação : O campo Referenciador tem algumas limitações:
      • O risco de bloquear envios de formulário legítimo.
      • O link pode vir de um email ou o indicador não tem um URL.
      • Navegadores podem deliberadamente desmarque o campo Referenciador, como durante uma solicitação HTTPS.
    • Use URLEncode para codificar URLs recebidos como parâmetros de entrada.

      O método URLEncode aplica regras, inclusive caracteres de escape, uma seqüência de caracteres especificada de codificação de URL. Você deve codificar URLs de entrada antes de exibi-los. Eis aqui um exemplo para URLEncode :
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Remover ou modificar caracteres especiais de parâmetros de entrada. Caracteres especiais incluem o seguinte:
      < > " ' % ; ) ( & +
      							
      você pode remover ou modificar caracteres quando você lê-los ou quando você os exibe para o navegador dependendo do seu aplicativo.

      Este exemplo usa JavaScript para filtrar caracteres especiais:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      Este exemplo utiliza expressões regulares do Visual Basic Scripting Edition versão 5.0 para filtrar caracteres especiais:
      Function ValidateTags(QueryString)
      	Dim o
      	Set o = CreateObject("VBScript.RegExp") ' -> VB Script 5.0
      
      	Dim sBad
      
      	sBad = "(<\s*(script|object|applet|embed|form)\s*>)"   ' <  script xxx >
      	sbad = sbad & "|" & "(<.*>)"
                   ' >xxxxx<  warning includes hyperlinks and stuff between > and <
      	sbad = sbad & "|" & "(&.{1,5};)"   ' &xxxx;
      	sbad = sbad & "|" & "eval\s*\("    ' eval  ( 
       	sbad = sbad & "|" & "(event\s*=)"  ' event  =
      	
      	'Now lets check for encoding
      	sbad = Replace(sbad,"<", "(<|%60|<)")
      	sbad = Replace(sbad,">", "(>|%62|>)")
      	
      	o.IgnoreCase = True 'ignore case of string
      	o.Global =False 'stop on first hit
      
      	o.Pattern = sBad
      
      	ValidateTags = o.Test(QueryString)
      
      	Set o = Nothing
      End Function
      						

Referências

Para obter mais informações, consulte o seguinte comunicado do computador CERT Emergency Response Team () na Carnegie Mellon University:
http://www.cert.org/advisories/CA-2000-02.html
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
252985Como evitar problemas de segurança de scripts entre sites para aplicativos da Web
253121Como revisar MTS/ASP código para a vulnerabilidade de CSSI
253120Como revisar código gerado pelo Visual InterDev para a vulnerabilidade de CSSI
253117Como impedir vulnerabilidade CSSI Internet Explorer e Outlook Express
A Microsoft fornece terceiros informações de contatos para ajudá-lo a encontrar suporte técnico. Essa informações de contatos podem ser alteradas sem aviso prévio. A Microsoft não garante a precisão dessas informações contatos de terceiros.

Propriedades

ID do artigo: 253119 - Última revisão: sexta-feira, 8 de julho de 2005 - Revisão: 1.3
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
Palavras-chave: 
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 253119
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com