Como rever ASP código para a vulnerabilidade CSSI

Traduções de Artigos Traduções de Artigos
Artigo: 253119 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Este artigo descreve como identificar e correcto aplicações ASP (Active Server Pages) que são susceptíveis a acesso a sites scripts segurança problemas (CSSI). Apenas entradas validada ou formatadas correctamente não torna a aplicação vulnerável a ataques.

Mais Informação

Os passos seguintes ajudam a identificar e corrigir aplicações de ASP são susceptíveis a CSSI:
  1. Procure o código ASP gera HTML a ser apresentado. ASP escreve HTML para a saída de duas formas:
    Response.Write
    					
    - e -
    <% =
    					
  2. Determine se a saída HTML inclui parâmetros de entrada. Estes parâmetros podem ser provenientes uma variedade de origens. A lista seguinte inclui origens de entrada comuns:

    Reduzir esta tabelaExpandir esta tabela
    Origem de entradaExemplo do método de acesso de código ASP
    Colecção Request.Form
    Response.Write Request.Form("username")
    									
    Colecçã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 Request
    Response.Write("username")
    									
    Bases de dados / métodos de acesso de dados
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Colecção de cookies
    Response.Write Request.Cookie("username")
    									
    Variáveis de aplicação e de sessão
    Response.Write Session("username")
    									
  3. Quando localizar o código ASP gera HTML utilizando alguns comentários, terá de avaliar soluções para a aplicação específica. As soluções abaixo apresentam alguns conceitos gerais para ajudar a começar a prevenção de CSSI.

    Tenha em atenção que quando filtragem ou codificação, tem de especificar um carácter definido para as páginas Web garantir que o filtro está a procurar os caracteres especiais apropriados. Os dados inseridos em páginas Web devem filtrar sequências de bytes que são consideradas especiais baseia o conjunto de caracteres específico (conjunto de caracteres). Um conjunto de caracteres popular é ISO 8859-1, que é a predefinição em versões anteriores do HTML e HTTP. Tem de tomar para problemas de localização de conta quando alterar estes parâmetros.
    • Utilize o método HTMLEncode para codificar parâmetros de entrada ao gerar o ecrã.

      Em geral, a maior parte dos ataques CSSI podem ser impedidos simplesmente utilizando HTMLEncode nos parâmetros de entrada. Utilizar HTMLEncode funciona ao substituir caracteres que têm significados especiais em variáveis HTML para HTML que representam esses caracteres; (por exemplo & = &, "="). Registe a nota que apenas os dados tem de estar codificados e não as cadeias completas.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER pode ser utilizada para limitar o domínio a partir do qual os pedidos podem ser submetidos.

      HTTP_REFERER devolve uma cadeia que contém o URL do pedido original quando ocorreu um redireccionamento. Servidores Web podem verificar o campo referenciador quando receber um formulário preenchido e rejeitar se não ficar no local correcto. Pode verificar o HTTP_REFERER da seguinte forma:
         <%
         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
         %> 
      							
      Nota : O campo referenciador tem algumas limitações:
      • Risco de bloquear as submissões de formulário legítimo.
      • A ligação poderá vir de um correio electrónico ou marcador não é necessário um URL.
      • Browsers poderão deliberadamente limpe o campo referenciador, como, por exemplo, durante um pedido HTTPS.
    • Utilize URLEncode para codificar URL recebido como parâmetros de entrada.

      O método URLEncode aplica regras, incluindo caracteres de escape, à cadeia especificada de codificação de URL. Deve codificar URL a receber antes de apresentá-los. Eis um exemplo de 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:
      < > " ' % ; ) ( & +
      							
      pode remover ou modificar caracteres quando lê-los ou quando a apresentá-los para o browser dependendo da aplicação.

      Este exemplo utiliza 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 mais informações, consulte o seguinte aviso a partir do computador emergência Response Team (CERT) informática da Universidade Carnegie Mellon:
http://www.cert.org/advisories/CA-2000-02.html
Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
252985Como impedir que os problemas relacionados com segurança de processamento de scripts de entre sites para aplicativos da Web
253121Como rever MTS/ASP código para a vulnerabilidade CSSI
253120Como rever Visual InterDev gerado código para a vulnerabilidade CSSI
253117Como impedir que o Internet Explorer e Outlook Express vulnerabilidade CSSI
Microsoft fornece informações de contactos outros fabricantes para ajudar a encontrar suporte técnico. Poderá ser alterado estas informações de contacto sem aviso prévio. Microsoft não garante a precisão destas informações de contacto outros fabricantes.

Propriedades

Artigo: 253119 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 253119
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

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