Como evitar problemas de segurança scripts intersites

Traduções deste artigo Traduções deste artigo
ID do artigo: 252985 - Exibir os produtos aos quais esse artigo se aplica.
Aviso
Este artigo se aplica ao Windows 2000. Suporte 2000 termina em 13 de julho de 2010.Windows 2000 End-of-Support Solution Center é um ponto de partida para planejar uma estratégia de migração do Windows 2000. Para obter mais informações, consulte a Microsoft Support Lifecycle Policy.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Páginas HTML geradas dinamicamente podem apresentar riscos de segurança se entradas não são validadas tanto em forma no ou em forma out. Script mal-intencionado pode ser incorporado dentro de entrada que é enviada para páginas da Web e que aparecem para os navegadores como originado de uma fonte confiável. Esse problema é conhecido como um problema de segurança de script entre sites. Este artigo discute problemas de segurança scripts intersites, ramificações e prevenção.

Mais Informações

O problema

O problema subjacente é que muitas páginas Web exibir entrada não validada. Se a entrada não validada, script mal-intencionado pode ser incorporado dentro de entrada. Se um script do lado do servidor, em seguida, exibe esta entrada não validada, o script é executado no navegador como embora gerado pelo site confiável.

Ramificações

Se a entrada para suas páginas da Web dinâmicas não é validada, você pode encontrar os seguintes problemas:
  • Integridade de dados pode ser comprometida.
  • Podem ser definidos e ler cookies.
  • Entrada de usuário pode ser interceptada.
  • Scripts mal-intencionados podem ser executados pelo cliente no contexto de fonte confiável.
Quais páginas da Web correm risco? Essencialmente, o problema afeta a criação de página dinâmica com base na entrada que não foi validada. Exemplos típicos incluem os seguintes tipos de páginas da Web:
  • Mecanismos de pesquisa retornam páginas de resultados com base na entrada do usuário.
  • Páginas de login que armazenam contas de usuário em bancos de dados, cookies e assim por diante e posteriormente escrever o nome de usuário para o cliente.
  • Formulários da Web que processam informações de cartão de crédito.

Prevenção

Esta seção apresenta algumas abordagens para impedindo ataques de segurança script entre sites. Avalie sua situação específica para determinar quais técnicas funcionará melhor para você. É importante observar que, em todas as técnicas, você está validando dados que receber de entrada e não seu script confiável. Essencialmente, a prevenção significa que você siga boa prática de codificação executando verificações de sanidade na sua entrada para suas rotinas.

A lista a seguir descreve abordagens gerais para impedir ataques de script entre sites:
  • Codifica a saída com base em parâmetros de entrada.
  • Filtre parâmetros de entrada de caracteres especiais.
  • Saída de filtro com base em parâmetros de entrada de caracteres especiais.
Quando você filtra ou codifica, você deve especificar um conjunto de caracteres para suas páginas da Web garantir que seu filtro está verificando os caracteres especiais apropriados. Seqüências de bytes que são consideradas especiais com base no conjunto específico de caracteres devem filtrar dados que são inseridos em páginas da Web. Um charset popular é ISO 8859-1, qual era o padrão em versões anteriores de HTML e HTTP. Você deve levar em conta problemas de localização quando você alterar esses parâmetros.

Codifique a saída com base em parâmetros de entrada de caracteres especiais

Codifica dados recebidos como entrada quando você escreve como HTML. Essa técnica é eficaz em dados que não foi validados por algum motivo durante a entrada. Usando técnicas como HTMLEncode e URLEncode, você pode impedir que scripts mal-intencionados em execução.

Os trechos de código a seguir demonstram como usar HTMLEncode e URLEncode de páginas Active Server Pages (ASP):
<%
      var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
      Response.write("<a href=\"" + BaseUrl +
      Server.URLEncode(Request.QueryString("SearchString")) +
      "\">click-me</a>");
%>
<% Response.Write("Hello visitor <I>" +
      Server.HTMLEncode(Request.Form("UserName")) +
      "</I>");
%>
				
se você codificar o HTML e URLs, você precisa especificar a página de código como você faria se estivesse filtrar dados.

É importante observar que chamar HTMLEncode na seqüência de caracteres está prestes a ser exibido para impedir qualquer script em que ele seja executado e, portanto, impede que o problema.

Filtrar parâmetros de entrada de caracteres especiais

Filtragem de entrada funciona removendo alguns ou todos os caracteres especiais da sua entrada. Caracteres especiais são caracteres ativar script gerado dentro de um fluxo HTML. Caracteres especiais incluem o seguinte:
< > " ' % ; ) ( & + -
				
Observação que sua situação individual pode exigir a filtragem de caracteres adicionais ou seqüências de caracteres além caracteres especiais.

Enquanto a filtragem pode ser uma técnica eficaz, há algumas advertências:
  • Filtragem pode não ser apropriada para alguma entrada. Por exemplo, em cenários onde você está recebendo entrada <text>de um formulário HTML, você em vez disso, pode escolher um método como codificação (veja abaixo).
  • Alguns caracteres filtradas podem ser realmente entrada necessária para o script do lado do servidor.
O filtro de exemplo seguinte, que está escrito em JavaScript, demonstra como remover caracteres especiais:
function RemoveBad(strTemp) { 
    strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
    return strTemp;
} 
				
o seguinte código processa a entrada do usuário antes de armazená-los para uso posterior.
<% Session("StoredPreference") = RemoveBad(Request.Cookies("UserColor"));
         var TempStr = RemoveBad(Request.QueryString("UserName"));				

Saída de filtro com base em parâmetros de entrada de caracteres especiais

Essa técnica é semelhante à filtragem de entrada, exceto que você filtrar caracteres que são gravadas para o cliente. Embora isso pode ser uma técnica eficaz, ele pode apresentar um problema para páginas da Web que escrever elementos HTML.

Por exemplo, em uma página que grava fora <TABLE>elementos, uma função genérica que remove os caracteres especiais seria retirar o < e > caracteres, piora marca <TABLE>. Portanto, em ordem para essa técnica ser útil, você teria apenas filtrar dados passados ou dados que foi anteriormente inseridos pelo usuário e armazenados em um banco de dados.

Possíveis fontes de dados mal-intencionados

Enquanto o problema se aplica a qualquer página que usa entrada para gerar HTML dinamicamente, a seguir estão alguns possíveis fontes de dados mal-intencionados para ajudar você a seleção de cores especiais para possíveis riscos de segurança:
  • String de consulta
  • Cookies
  • Dados postados
  • URLs e peças de URLs, como PATH_INFO
  • Dados recuperados de usuários que persistentes de alguma forma, como em um banco de dados

Conclusão

Concluindo, a seguir é pontos-chave a serem lembrados sobre o problema de segurança de script entre sites:
  • O problema afeta a criação de página dinâmica com base na entrada que não foi validada.
  • Omissão de uma verificação de sanidade em dados de entrada pode ter implicações de segurança inesperado. O problema é preventable por meio de padrões de desenvolvimento boa como validação de entrada.
  • Você precisa avaliar soluções em um por site, página e até mesmo campo base e usar uma técnica que faz sentido.

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 mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento:
253117Internet Explorer e Outlook Express impedindo intersite script problemas de segurança
253119Como revisar o código ASP para vulnerabilidade CSSI
253120Como revisar Visual InterDev gerado código para vulnerabilidade CSSI
253121Como revisar o código ASP/MTS para vulnerabilidade CSSI

Propriedades

ID do artigo: 252985 - Última revisão: quarta-feira, 1 de março de 2006 - Revisão: 3.6
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 2.0
  • Microsoft Active Server Pages 3.0
  • Microsoft Windows 2000 Server
Palavras-chave: 
kbmt kbcodesnippet kbcssi kbhowto kbsecurity KB252985 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: 252985

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