Μπορεί να γίνει ανακατεύθυνση αιτήσεων κεφαλίδα IIS CGI HTTP_PROXY

Συμπτώματα

Όταν χρησιμοποιείτε τη δυνατότητα των υπηρεσιών IIS Common Gateway Interface (CGI) για να φιλοξενήσετε ένα εκτελέσιμο πρόγραμμα που χρησιμοποιεί μια συγκεκριμένη βιβλιοθήκη για να ανακατευθύνετε αιτήσεις, αιτήσεις μπορούν να γίνονται παράνομα με βάση την ύπαρξη μιας κεφαλίδας αίτησης "Διακομιστής ΜΕΣΟΛΆΒΗΣΗΣ". Αρκετές πλατφόρμες εφαρμογής web είναι γνωστές για να χρησιμοποιήσετε αυτήν τη βιβλιοθήκη. Αυτά περιλαμβάνουν PHP, Python και μετάβαση, μεταξύ άλλων.

Αιτία

CGI είναι μια διασύνδεση η οποία επιτρέπει σε ένα διακομιστή web για εφαρμογές κεντρικού υπολογιστή που εκτελούνται ως διεργασίες εκτελέσιμο. Όταν ληφθεί μια αίτηση από ένα διακομιστή web, ο διακομιστής ξεκινά μια νέα διαδικασία για να χειριστεί αυτό το αίτημα. Όταν ολοκληρωθεί το αίτημα, η διεργασία τερματίζεται. Προκειμένου η διαδικασία να έχουν πρόσβαση στα δεδομένα της αίτησης, οι κεφαλίδες αίτησης περιλαμβάνονται ως μεταβλητές περιβάλλοντος που έχουν "Πρόθεμα HTTP_" συνοδεύεται με το όνομά τους. Επομένως, οι διεργασίες CGI για τις αιτήσεις που περιέχουν μια επικεφαλίδα που ονομάζεται "Διακομιστής μεσολάβησης" έχουν μια μεταβλητή περιβάλλοντος "HTTP_PROXY" που έχουν την ίδια τιμή με την κεφαλίδα αίτησης.

Η καμπύλη γραμμή εντολών και τη βιβλιοθήκη χρησιμοποιούνται συνήθως για να ενεργοποιήσετε διάφορες εφαρμογές για να κάνουν αιτήσεις για διάφορα είδη διακομιστές, συμπεριλαμβανομένων των διακομιστών web. Αυτή η βιβλιοθήκη μπορεί να ρυθμιστεί χρησιμοποιώντας τις παραμέτρους γραμμής εντολών ή να μπορεί να διαβάσει τις παραμέτρους ρύθμισης παραμέτρων από τις μεταβλητές περιβάλλοντος της διαδικασίας κεντρικού υπολογιστή. "HTTP_PROXY" είναι μία από τις πολλές παραμέτρους ρύθμισης παραμέτρων που χρησιμοποιούνται από την καμπύλη. "HTTP_PROXY" χρησιμοποιείται από καμπύλη για να στείλετε μια αίτηση HTTP μέσω του διακομιστή μεσολάβησης που έχει ρυθμιστεί.

Σημείωση Αυτό δεν σχετίζεται με το "HTTP_PROXY" ως η αναπαράσταση της κεφαλίδας αίτησης ενός προγράμματος-πελάτη.

Όταν η καμπύλη βρίσκεται μέσα σε μια διαδικασία CGI, και αυτή η διεργασία περιέχει μια μεταβλητή περιβάλλοντος με το όνομα "HTTP_PROXY", καμπύλη χρησιμοποιεί την τιμή για να στείλετε τα δεδομένα που ζητήθηκαν μέσω του διακομιστή μεσολάβησης HTTP των οποίων η αξία καθορίζεται στη μεταβλητή περιβάλλοντος. Αυτό συμβαίνει επειδή η καμπύλη αναμένει ότι "HTTP_PROXY" είναι μια οδηγία ρύθμισης παραμέτρων και δεν μια κεφαλίδα αίτησης του υπολογιστή-πελάτη.

Εναλλακτικός τρόπος αντιμετώπισης

Για να επιλύσετε αυτό το ζήτημα, μην χρησιμοποιείτε CGI σε ένα διακομιστή που εκτελεί τις υπηρεσίες IIS. CGI είναι μια απαρχαιωμένη σε μεγάλο βαθμό διασύνδεση που έχει αντικατασταθεί από νεότερη και πιο επιδόσεων που σχετίζονται με τις διασυνδέσεις. Συγκεκριμένα, PHP, Python και διανομής θα πρέπει να φιλοξενούνται μέσω FastCGI στις υπηρεσίες IIS. FastCGI δεν χρησιμοποιεί μεταβλητές περιβάλλοντος για κεφαλίδες αίτησης του υπολογιστή-πελάτη και δεν διαθέτει αυτό το ζήτημα. Ωστόσο για PHP, ορισμένες εφαρμογές ενδέχεται να χρησιμοποιήσετε συνάρτηση getenv() PHPs για την ανάκτηση των μεταβλητών περιβάλλοντος. Ακόμα και όταν PHP δεν βρίσκεται μέσα σε μια διαδικασία CGI, το αναπαράγει τη συμπεριφορά CGI εισάγοντας τιμές κεφαλίδας αίτησης στο σύνολο των δεδομένων που είναι διαθέσιμες για τη συνάρτηση getenv() . Εάν χρησιμοποιείτε μια εφαρμογή PHP που ανακτά HTTP_PROXY με αυτόν τον τρόπο, ισχύουν τα παρακάτω μετριασμούς καταργώντας την τιμή κεφαλίδας ή απορρίπτει αιτήσεις με μια κεφαλίδα PROXY.

Εάν χρειάζεται να χρησιμοποιήσετε CGI για κάποιο λόγο, εμποδίσει τις αιτήσεις που περιέχουν κεφαλίδα αίτησης με το όνομα "Διακομιστής μεσολάβησης" ή καταργήστε την τιμή της κεφαλίδας.  Αυτό συμβαίνει επειδή "Διακομιστής μεσολάβησης" δεν είναι ένα όνομα κεφαλίδας αίτησης τυπική και τα προγράμματα περιήγησης συνήθως δεν θα στείλει αυτό.

Για να αποκλείσετε μια αίτηση που περιέχει μια κεφαλίδα Proxy (η προτιμώμενη λύση), εκτελέστε την ακόλουθη γραμμή εντολών:
Appcmd ρύθμιση παραμέτρων /section:requestfiltering / + requestlimits.headerLimits. [κεφαλίδα = 'διακομιστής μεσολάβησης', sizelimit = '0']

Σημείωση Το appcmd.exe δεν βρίσκεται συνήθως στη διαδρομή και βρίσκεται στον κατάλογο %systemroot%\system32\inetsrv

Για να καταργήσετε την τιμή της κεφαλίδας, μπορείτε να χρησιμοποιήσετε τον παρακάτω κανόνα επανεγγραφή URL:
<system.webServer>    <rewrite>
<rules>
<rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">
<match url="*.*" />
<serverVariables>
<set name="HTTP_PROXY" value="" />
</serverVariables>
<action type="None" />
</rule>
</rules>
</rewrite>
</system.webServer>

Σημείωση Η διεύθυνση URL επανεγγραφή είναι μια δυνατότητα λήψης πρόσθετο στις υπηρεσίες IIS και δεν περιλαμβάνεται στην προεπιλεγμένη εγκατάσταση των υπηρεσιών IIS.
Ιδιότητες

Αναγνωριστικό άρθρου: 3179800 - Τελευταία αναθεώρηση: 16 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια