Cómo revisar código ASP la vulnerabilidad de CSSI

Seleccione idioma Seleccione idioma
Id. de artículo: 253119 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Este artículo describe cómo identificar y aplicaciones de páginas Active Server (ASP) correcto que son susceptibles a Cross-Site Scripting seguridad problemas (CSSI). Sólo de entrada que se valida correctamente o con formato hace que la aplicación sea vulnerable a ataques.

Más información

Los pasos siguientes ayudarán a identificar y corregir aplicaciones ASP que no son susceptibles a CSSI:
  1. Busque código ASP que genere formato HTML que se va a mostrar. ASP escribe HTML en el resultado de dos maneras:
    Response.Write
    					
    - y -
    <% =
    					
  2. Determinar si el resultado HTML incluye los parámetros de entrada. Estos parámetros pueden provenir de diversos orígenes. La lista siguiente incluye orígenes de entrada común:

    Contraer esta tablaAmpliar esta tabla
    Origen de entradaEjemplo del método de acceso de código ASP
    Colección Request.Form
    Response.Write Request.Form("username")
    									
    Colección 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 datos y métodos de acceso de datos
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Colección de cookies
    Response.Write Request.Cookie("username")
    									
    Variables de aplicación y sesión
    Response.Write Session("username")
    									
  3. Cuando encuentre el código ASP que genera HTML mediante alguna entrada, deberá evaluar soluciones para su aplicación específica. Las soluciones siguientes presentan algunos conceptos generales para ayudarle a comenzar la prevención de CSSI.

    Tenga en cuenta que cuando el filtrado o codificación, que debe especificar un carácter establecido para que las páginas Web para asegurarse de que el filtro está comprobando los caracteres especiales adecuados. Los datos insertados en las páginas Web deben filtrar secuencias de bytes que se consideran especiales basándose en el conjunto de caracteres específico (charset). Un popular juego de caracteres es ISO 8859-1, que es el valor predeterminado en las primeras versiones de HTML y HTTP. Debe tener en cuenta los problemas de localización de cuentas cuando cambie estos parámetros.
    • Utilice el método HTMLEncode para codificar los parámetros de entrada al generar la pantalla.

      En general, la mayoría de los ataques CSSI pueden evitarse simplemente mediante HTMLEncode en parámetros de entrada. Utilizando funciona de HTMLEncode reemplazando caracteres que tienen un significado especial en HTML al HTML variables que representan esos caracteres; (por ejemplo & = & "="). Por favor, tenga en cuenta que sólo los datos deben estar codificado y no las cadenas completas.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER puede utilizarse para limitar el dominio desde el que se pueden enviar solicitudes.

      HTTP_REFERER devuelve una cadena que contiene la dirección URL de la solicitud original cuando se ha producido una redirección. Los servidores Web pueden comprobar el campo de referencia cuando se recibe un formulario que rellena y rechazarla si no proviene desde el lugar correcto. Puede comprobar el HTTP_REFERER en la siguiente manera:
         <%
         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 : el campo de referencia tiene algunas limitaciones:
      • Se arriesga a bloquear los envíos de formulario legítimo.
      • El vínculo puede proceder de un correo electrónico o marcador que no tiene una dirección URL.
      • Exploradores deliberadamente que desactive el campo referencia, como durante una solicitud HTTPS.
    • Utilice URLEncode para codificar direcciones URL que recibe como parámetros de entrada.

      El método URLEncode aplica las reglas, incluyendo caracteres de escape a una cadena especificada de codificación de URL. Debe codificar las direcciones URL entrantes antes de mostrarlos. Éste es un ejemplo para URLEncode :
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Quitar o modificar caracteres especiales de los parámetros de entrada. Caracteres especiales son los siguientes:
      < > " ' % ; ) ( & +
      							
      puede quitar o modificar caracteres cuando se lee en o cuando se muestran en el explorador dependiendo de la aplicación.

      En este ejemplo se utiliza JavaScript para filtrar los caracteres especiales:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      este ejemplo utiliza expresiones regulares de Visual Basic Scripting Edition versión 5.0 para filtrar los caracteres especiales:
      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
      						

Referencias

Para obtener más información, consulte el Advisory de Computer Emergency Response Team (CERT) de Carnegie Mellon University en el siguiente sitio Web:
http://www.cert.org/advisories/CA-2000-02.html
Para obtener información adicional, haga clic en los números de artículo correspondientes para verlos en Microsoft Knowledge Base:
252985Cómo evitar problemas de seguridad de scripting de Cross-Site para aplicaciones Web
253121Cómo revisar código MTS/ASP la vulnerabilidad de CSSI
253120Cómo revisar código generado por Visual InterDev la vulnerabilidad de CSSI
253117Cómo evitar la vulnerabilidad CSSI de Internet Explorer y Outlook Express
Microsoft proporciona información de contacto con otros proveedores para ayudarle a encontrar soporte técnico. Esta información de contacto puede cambiar sin previo aviso. Microsoft no ofrece ninguna garantía con respecto a la exactitud de esta información de contacto con otros proveedores.

Propiedades

Id. de artículo: 253119 - Última revisión: viernes, 8 de julio de 2005 - Versión: 1.3
La información de este artículo se refiere a:
  • Microsoft Active Server Pages 4.0
Palabras clave: 
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 253119
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

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