Με την αναθεώρηση κώδικας ASP για το θέμα ευπάθειας CSSI

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 253119 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο περιγράφει τον τρόπο προσδιορισμού και σωστές εφαρμογές ενεργών σελίδων διακομιστή (ASP) που είναι επιρρεπείς σε διατοποθεσιακών δέσμες ενεργειών ασφαλείας θέματα (CSSI). Μόνο εισόδου που είναι σωστά δεν επικυρωθεί ή μορφοποίηση καθιστά την εφαρμογή σας ευάλωτο σε επιθέσεις.

Περισσότερες πληροφορίες

Τα παρακάτω βήματα θα σας βοηθήσουν να προσδιορίσετε και να διορθώσετε ΤΙΣ εφαρμογές ASP είναι ευάλωτα σε CSSI:
  1. Αναζητήστε κώδικα ASP που δημιουργεί HTML θα εμφανίζεται. ASP εγγράφει HTML στην έξοδο με δύο τρόπους:
    Response.Write
    					
    -και-
    <% =
    					
  2. Εξακριβώστε αν η έξοδος HTML περιλαμβάνει παραμέτρους εισόδου. Αυτές οι παράμετροι μπορούν να προέρχονται από διάφορες πηγές. Η ακόλουθη λίστα περιλαμβάνει κοινές προελεύσεις εισόδου:

    Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
    Προέλευση εισόδουΔείγμα μέθοδος πρόσβασης σε κώδικα ASP
    Συλλογής Request.Form
    Response.Write Request.Form("username")
    									
    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>
    									
    Αίτηση για αντικείμενο
    Response.Write("username")
    									
    Βάσεις δεδομένων / μέθοδοι πρόσβασης δεδομένων
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Συλλογή cookies
    Response.Write Request.Cookie("username")
    									
    Περίοδος λειτουργίας και μεταβλητών εφαρμογής
    Response.Write Session("username")
    									
  3. Όταν βρείτε κώδικα ASP που δημιουργεί HTML χρησιμοποιώντας ορισμένα δεδομένα εισόδου, πρέπει να αξιολογήσετε λύσεις για την συγκεκριμένη εφαρμογή. Τις παρακάτω λύσεις παρουσιάζουν ορισμένες Γενικές έννοιες για να αρχίσετε την πρόληψη της CSSI.

    Έχετε υπόψη σας ότι κατά το φιλτράρισμα ή την κωδικοποίηση, πρέπει να καθορίσετε ένα σύνολο χαρακτήρων για τις ιστοσελίδες σας για να εξασφαλίσετε ότι το φίλτρο ελέγχει τους κατάλληλους ειδικούς χαρακτήρες. Τα δεδομένα που εισαγάγατε στις ιστοσελίδες σας θα φιλτράρει τις ακολουθίες byte που λαμβάνονται υπόψη οι ειδικές με βάση το συγκεκριμένο σύνολο χαρακτήρων (σύνολο χαρακτήρων). Ένα δημοφιλές σύνολο χαρακτήρων είναι ISO 8859-1, ο οποίος είναι η προεπιλογή στις παλαιότερες εκδόσεις της HTML και HTTP. Πρέπει να ακολουθήσετε σε θέματα μετάφρασης λογαριασμού όταν αλλάζετε αυτές τις παραμέτρους.
    • Χρήση τουHTMLEncodeμέθοδος για την κωδικοποίηση παράμετροι εισόδου κατά τη δημιουργία της οθόνης.

      Σε γενικές γραμμές, εμπόδισε τις περισσότερες επιθέσεις CSSI απλά χρησιμοποιώνταςHTMLEncodeστις παραμέτρους εισόδου. usingHTMLEncodeλειτουργεί με την αντικατάσταση χαρακτήρων που έχουν ειδική σημασία σε μεταβλητές HTML σε HTML που αντιπροσωπεύουν αυτούς τους χαρακτήρες, (για παράδειγμα, & = & "="). Επικοινωνήστε Σημειώστε ότι μόνο τα δεδομένα πρέπει να κωδικοποιηθούν και δεν τα πλήρη κείμενα.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER μπορεί να χρησιμοποιηθεί για να περιορίσετε τον τομέα από τον οποίο μπορούν να υποβληθούν αιτήσεις.

      HTTP_REFERER επιστρέφει μια συμβολοσειρά που περιέχει τη διεύθυνση URL της αρχικής αίτησης, όταν έχει παρουσιαστεί μια ανακατεύθυνση. Οι διακομιστές Web μπορεί να ελέγξει το πεδίο αναφοράς όταν μπορούν να λαμβάνουν μια φόρμα συμπληρωμένα και να απορρίψετε εάν αυτό δεν προέρχεται από το σωστό σημείο. Μπορείτε να ελέγξετε το HTTP_REFERER με τον ακόλουθο τρόπο:
         <%
         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
         %> 
      							
      ΣΗΜΕΙΩΣΗ: Το πεδίο αναφοράς έχει κάποιους περιορισμούς:
      • Υπάρχει κίνδυνος αποκλεισμού υποβολές φόρμας νόμιμα.
      • Η σύνδεση μπορεί να προέρχεται από ένα ηλεκτρονικό ταχυδρομείο ή το σελιδοδείκτη που δεν έχει μια διεύθυνση URL.
      • Σκόπιμα προγράμματα περιήγησης μπορεί να καταργήστε το πεδίο αναφοράς, όπως κατά τη διάρκεια μιας αίτησης HTTPS.
    • ΧρησιμοποιήστεURLEncodeΓια να κωδικοποιήσετε τις διευθύνσεις URL που λαμβάνονται ως παράμετροι εισόδου.

      Για ναURLEncodeμέθοδος εφαρμόζει κανόνες κωδικοποίησης URL, συμπεριλαμβανομένων χαρακτήρων escape, για την καθορισμένη συμβολοσειρά. Θα πρέπει να κωδικοποιήσετε τις εισερχόμενες διευθύνσεις URL πριν την εμφάνισή τους. Ακολουθεί ένα δείγμαURLEncode:
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Απομάκρυνση ή να τροποποιήσετε ειδικούς χαρακτήρες από παραμέτρους εισόδου. Ειδικοί χαρακτήρες περιλαμβάνουν τα εξής:
      < > " ' % ; ) ( & +
      							
      Μπορείτε να απομάκρυνση ή να τροποποιήσετε χαρακτήρες όταν τους στην ανάγνωση ή όταν τα εμφανίζετε στο πρόγραμμα περιήγησης ανάλογα με την εφαρμογή σας.

      Αυτό το δείγμα χρησιμοποιεί JavaScript για να φιλτράρετε τους ειδικούς χαρακτήρες:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      Αυτό το δείγμα χρησιμοποιεί κανονικές εκφράσεις Visual Basic Scripting Edition έκδοση 5.0 για να φιλτράρετε τους ειδικούς χαρακτήρες:
      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
      						

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στο συμβουλευτικό δελτίο παρακάτω από τον υπολογιστή εφεδρική απόκρισης ομάδας (CERT) στο Carnegie Mellon στο πανεπιστήμιο:
http://www.CERT.org/advisories/CA-2000-02.HTML
Για πρόσθετες πληροφορίες, κάντε κλικ στους αριθμούς των άρθρων παρακάτω, για να προβάλετε τα άρθρα της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
252985Τρόπος αποτροπής προβλημάτων ασφαλείας του δεσμών ενεργειών μεταξύ τοποθεσιών για εφαρμογές Web
253121Με την αναθεώρηση του MTS/ASP κώδικας για το θέμα ευπάθειας CSSI
253120Τρόπος αναθεώρηση Visual InterDev τεχνητό κώδικα για το ζήτημα ευπάθειας CSSI
253117Τρόπος αποτροπής της ευπάθειας CSSI του Internet Explorer και το Outlook Express
Η Microsoft παρέχει πληροφορίες επικοινωνίας με άλλους κατασκευαστές, για να σας βοηθήσει να βρείτε τεχνική υποστήριξη. Αυτές οι πληροφορίες επικοινωνίας ενδέχεται να αλλάξουν χωρίς προειδοποίηση. Η Microsoft δεν εγγυάται την ακρίβεια αυτών των πληροφοριών επικοινωνίας με άλλους κατασκευαστές.

Ιδιότητες

Αναγν. άρθρου: 253119 - Τελευταία αναθεώρηση: Κυριακή, 19 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Active Server Pages 4.0
Λέξεις-κλειδιά: 
kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability kbmt KB253119 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:253119
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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