Comment faire pour révision de code ASP pour la vulnérabilité CSSI

Traductions disponibles Traductions disponibles
Numéro d'article: 253119 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Cet article explique comment identifier et correct applications ASP (Active Server Pages) qui sont susceptibles d'être à CSSI (cross-site scripting sécurité problèmes). Seule entrée qui est validée ou mise en forme n'est pas correctement, votre application vulnérable aux attaques.

Plus d'informations

Les étapes suivantes vous aider à identifier et corriger les applications ASP qui sont susceptibles d'être CSSI :
  1. Recherchez le code ASP qui génère du code HTML à afficher. ASP écrit le HTML dans la sortie de deux manières :
    Response.Write
    					
    - et -
    <% =
    					
  2. Déterminer si la sortie HTML comprend des paramètres d'entrée. Ces paramètres peuvent provenir de diverses sources. La liste suivante inclut des sources entrées courantes :

    Réduire ce tableauAgrandir ce tableau
    Source d'entréeExemple de méthode d'accès au code ASP
    Collection Request.Form
    Response.Write Request.Form("username")
    									
    Collection 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>
    									
    Objet Request
    Response.Write("username")
    									
    Bases de données / méthodes de données Access
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Collection de cookies
    Response.Write Request.Cookie("username")
    									
    Variables d'application et de session
    Response.Write Session("username")
    									
  3. Lorsque vous avez trouvé le code ASP qui génère du code HTML à l'aide d'une entrée, vous devez évaluer les solutions pour votre application. Les solutions ci-dessous présentent certains concepts généraux pour vous aider à commencer la prévention de CSSI.

    Veuillez Notez que lorsque le filtrage ou codage, vous devez spécifier un jeu de caractères pour vos pages Web pour vous assurer que votre filtre recherche les caractères spéciaux appropriés. Les données insérées dans vos pages Web doivent filtrer les séquences d'octets qui sont considérés comme spéciaux basée sur le jeu de caractère spécifique (jeu de caractères). Un jeu de caractères populaire est ISO 8859-1, qui est la valeur par défaut dans les premières versions de HTML et HTTP. Vous devez tenir compte des problèmes de localisation lorsque vous modifiez ces paramètres.
    • Utilisez la méthode HTMLEncode pour coder les paramètres d'entrée lors de la génération d'affichage.

      En règle générale, la plupart des attaques CSSI peut être empêchée simplement en utilisant HTMLEncode sur les paramètres d'entrée. À l'aide de HTMLEncode fonctionne en remplaçant les caractères qui ont des significations spéciales dans les variables HTML à HTML qui représentent ces caractères; (par exemple, & = &, "="). Veuillez Notez que seules les données devant être codé et pas les chaînes complets.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER peut servir à limiter le domaine à partir de laquelle il est peuvent de soumettre les demandes.

      HTTP_REFERER retourne une chaîne qui contient l'URL de la demande d'origine lorsqu'une redirection s'est produite. Les serveurs Web peuvent vérifier le champ de point d'accès lorsqu'ils bénéficient d'un formulaire rempli et rejeter si il n'émane pas au bon endroit. Vous pouvez archiver le HTTP_REFERER la manière suivante :
         <%
         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
         %> 
      							
      Remarque : le champ point d'accès présente certaines limitations :
      • Vous risquez de blocage soumissions formulaire légitime.
      • Le lien peut-être provenir d'un message électronique ou un signet n'a pas une URL.
      • Navigateurs peuvent délibérément effacer le champ point d'accès, comme lors d'une demande HTTPS.
    • Utilisez URLEncode pour coder des URL reçus en tant que paramètres d'entrée.

      La méthode URLEncode applique les règles de codage des URL, y compris les caractères d'échappement, à une chaîne spécifiée. Vous devez coder des URL entrantes avant de les afficher. Voici un exemple pour URLEncode :
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Supprimer ou modifier des caractères spéciaux à partir des paramètres d'entrée. Caractères spéciaux sont les suivants :
      < > " ' % ; ) ( & +
      							
      vous pouvez supprimer ou modifier les caractères lorsque vous lisez dans ou lorsque vous les affichez dans le navigateur en fonction de votre application.

      Cet exemple utilise JavaScript pour filtrer les caractères spéciaux :
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      cet exemple utilise Visual Basic Scripting Edition version 5.0 des expressions régulières pour filtrer les caractères spéciaux :
      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
      						

Références

Pour plus d'informations, consultez le bulletin de sécurité suivante à partir de CERT (Computer Emergency Response Team) de Carnegie Mellon University :
http://www.cert.org/advisories/CA-2000-02.html
Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
252985Comment faire pour empêcher les problèmes de sécurité Scripting Cross-site pour les Applications Web
253121Comment faire pour révision de code MTS/ASP pour CSSI vulnérabilité
253120Comment faire pour révision code généré par Visual InterDev pour la vulnérabilité CSSI
253117Comment faire pour empêcher Internet Explorer et Outlook Express vulnérabilité CSSI
Microsoft fournit les coordonnées de sociétés tierces pour vous aider à trouver un support technique. Ces coordonnées peuvent être modifiés sans préavis. Microsoft ne garantit pas l'exactitude des informations concernant les tiers.

Propriétés

Numéro d'article: 253119 - Dernière mise à jour: vendredi 8 juillet 2005 - Version: 1.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Active Server Pages 4.0
Mots-clés : 
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 253119
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

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