Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Τι είναι η κατάσταση προβολής;

Προβολή κατάστασης είναι πληροφορίες που είναι στρογγυλεμένα στρογγυλοποιεί μεταξύ των σελίδων WebForms (. aspx) σε μια εφαρμογή ASP.NET. Η σήμανση HTML για το πεδίο __MOWLLLI παρόμοιο με το ακόλουθο:

< τύπος εισόδου = "κρυφό" όνομα = "__VOWOWA" ID = "__VOWA" τιμή = "..."/>Ένα παράδειγμα ενός στοιχείου που μπορεί να αποθηκευτεί στο πεδίο __VOWOWVOR είναι το κείμενο ενός στοιχείου ελέγχου κουμπιού. Εάν ένας χρήστης κάνει κλικ στο κουμπί, το πρόγραμμα χειρισμού συμβάντων Button_Click θα μπορεί να εξαγάγει το κείμενο του κουμπιού από το πεδίο κατάστασης προβολής. Δείτε το θέμα ASP.NET Προβολή επισκόπησης κατάστασης στην τοποθεσία Web του δικτύου προγραμματιστών της Microsoft (MSDN) για μια πολύ πιο λεπτομερή επισκόπηση της κατάστασης προβολής ASP.NET. Επειδή το πεδίο __SOWSSVI περιέχει σημαντικές πληροφορίες που χρησιμοποιούνται για την αναδόμηση της σελίδας σε postback, βεβαιωθείτε ότι ένας εισβολέας δεν μπορεί να παραβιάσει αυτό το πεδίο. Εάν ένας εισβολέας υποβάλει ένα ωφέλιμο φορτίο κακόβουλων __VOWA, ο εισβολέας θα μπορούσε δυνητικά να ξεγελάσει την εφαρμογή στην εκτέλεση μιας ενέργειας που διαφορετικά δεν θα είχε εκτελεστεί. Για να αποτρέψετε αυτό το είδος της επίθεσης αλλοίωσης, το πεδίο __VACAAI προστατεύεται από έναν κωδικό ελέγχου ταυτότητας μηνύματος (MAC). ASP.NET επικυρώνει το MAC που υποβάλλεται μαζί με το ωφέλιμο φορτίο __MACVAAΌΤΑΝ παρουσιάζεται μια επιστροφή. Το κλειδί που χρησιμοποιείται για τον υπολογισμό του MAC καθορίζεται στο στοιχείο της εφαρμογής στο αρχείο Web. config. Επειδή ο εισβολέας δεν μπορεί να μαντέψει τα περιεχόμενα του στοιχείου < μηχανή >, ο εισβολέας δεν μπορεί να παρέχει ένα έγκυρο MAC, εάν ο εισβολέας προσπαθήσει να παραβιάσει το ωφέλιμο φορτίο __MISAISA_. Το ASP.NET θα ανιχνεύσει ότι δεν έχει παρασχεθεί έγκυρο MAC και το ASP.NET θα απορρίψει την κακόβουλη αίτηση.

Τι προκαλεί σφάλματα επικύρωσης MAC;

Ένα σφάλμα επικύρωσης MAC θα μοιάζει με το ακόλουθο παράδειγμα:

Σφάλμα διακομιστή στην εφαρμογή '/'. Η επικύρωση της προβολής κατάστασης MAC απέτυχε. Εάν αυτή η εφαρμογή φιλοξενείται από ένα σύμπλεγμα Web ή σύμπλεγμα, βεβαιωθείτε ότι η ρύθμιση παραμέτρων < μηχανή > καθορίζει το ίδιο κλειδί validationKey και τον αλγόριθμο επικύρωσης. Δεν είναι δυνατή η χρήση της αυτόματης δημιουργίας σε ένα σύμπλεγμα. Περιγραφή: Παρουσιάστηκε μια εξαίρεση που δεν αντιμετωπίστηκε κατά την εκτέλεση της τρέχουσας αίτησης Web. Ελέγξτε το ίχνος στοίβας για περισσότερες πληροφορίες σχετικά με το σφάλμα και από πού προήλθε από τον κώδικα. Λεπτομέρειες εξαίρεσης: σύστημα. Web. http εξαίρεση: η επικύρωση της προβολής κατάστασης MAC απέτυχε. Εάν αυτή η εφαρμογή φιλοξενείται από μια συστοιχία Web ή ένα σύμπλεγμα, βεβαιωθείτε ότι η ρύθμιση παραμέτρων < Μηχανήκλειδιού > καθορίζει το ίδιο κλειδί validationKey και τον αλγόριθμο επικύρωσης. Δεν είναι δυνατή η χρήση της αυτόματης δημιουργίας σε ένα σύμπλεγμα. Σφάλμα προέλευσης: [δεν υπάρχουν σχετικές γραμμές πηγής] Αρχείο προέλευσης:... Γραμμή: 0 Ανίχνευση στοίβας: [Εξαίρεση ορατότητας: δεν είναι έγκυρη κατάσταση ορατότητας. IP πελάτη::: 1 Λιμένας: 40653 Αναφέρων: http://localhost:40643/MyPage.aspx Διαδρομή:/Myσελίδα.MLI Agent χρήστη: Mozilla/5.0 (συμβατό; MSIE 10,0. Windows NT 6,2; WOW64 Τρίαινα/6.0) Κατάσταση ορατότητας:...] [Εξαίρεση από το χρήστη (0x80004005): απέτυχε η επικύρωση της προβολής κατάστασης MAC. Εάν αυτή η εφαρμογή φιλοξενείται από μια συστοιχία Web ή ένα σύμπλεγμα, βεβαιωθείτε ότι η ρύθμιση παραμέτρων < Μηχανήκλειδιού > καθορίζει το ίδιο κλειδί validationKey και τον αλγόριθμο επικύρωσης. Δεν είναι δυνατή η χρήση της αυτόματης δημιουργίας σε ένα σύμπλεγμα. Δείτε το http://go.microsoft.com/fwlink/?LinkID=314055 για περισσότερες πληροφορίες.] System. Web. UI. Προβολή εξαίρεσης. Θέσησφάλμα (εσωτερική εξαίρεση, συμβολοσειρά Προστήκατάσταση, συμβολοσειρά 190 ΣΦΑΛΜΑ System. Web. UI. κατάσταση εξαίρεσης. Θέσηςσφάλμα (εσωτερική εξαίρεση, 46 συμβολοσειρά Μορφοποιητής συστήματος. Web. UI. αντικειμένου. αποσειριοποίηση (συμβολοσειρά εισαγωγής συμβολοσειράς, σκοπός) + 861 System. Web. UI. αντικειμένου μορφοποιητής. System. Web. UI. IStateFormatter2. αποσειριοποίηση (σειριοποιητής συμβολοσειράς, σκοπός) + 51 System. Web. UI. TII. Deserializedduizwidχωρίς (IStateFormatter2 μορφοποιητής, σειριοποίησης συμβολοσειράς, σκοπός) + 67 System. Web. UI. Κρυπαστήσεεςπατέση. φορτίο () + 444 System. Web. UI. σελίδα. Φορτώσετηδιαστενήσύστημα () + 368 System. Web. UI. σελίδα. Load Allstate () + 109 System. Web. UI. σελίδα. πρόγραμμα επεξεργασίας (δυαδικές Περιγραφίαπροτού ασύγχρονη, δυαδική 7959 τιμή Αίτηση συστήματος. Web. UI. Page. διεργασία (δυαδική τιμή που έχει γίνει 429 μετα-Ασύγδυςσημείο, δυαδική τιμή Αίτηση συστήματος. Web. UI. Page. διεργασίας () + 125 Σύστημα συστήματος. Web. UI. Page 48. Αίτηση συστήματος. Web. UI. Page. διεργασία (234 περιβάλλον περιεχομένου ASP. mypage_aspx. Αίτηση διεργασίας (περιβάλλον περιεχομένου του HTTP) στο...: 0 System. Web. Callhandhprochhllllluhhhll. System. Web 1300. Εφαρμογή System. Web... εκτελέ140 & Σηεφαρμογής. εκτελέσιμο πρόγραμμα (Iεκτελέσιμο βήμα

Αιτία 1: η εφαρμογή Web εκτελείται σε ένα σύμπλεγμα (περιβάλλον πολλών διακομιστών)

ASP.NET δημιουργεί αυτόματα ένα κλειδί κρυπτογράφησης για κάθε εφαρμογή και αποθηκεύει το κλειδί στην ομάδα μητρώου HKCU. Αυτό το κλειδί που δημιουργείται αυτόματα χρησιμοποιείται εάν δεν υπάρχει ρητή < μηχανή > στοιχείο στις παραμέτρους της εφαρμογής. Ωστόσο, επειδή αυτό το κλειδί που δημιουργείται αυτόματα είναι τοπικό για τον υπολογιστή που δημιούργησε το κλειδί, αυτό το σενάριο προκαλεί ένα πρόβλημα για εφαρμογές που εκτελούνται σε ένα σύμπλεγμα. Κάθε διακομιστής στη συστοιχία θα δημιουργήσει το δικό του τοπικό κλειδί και κανένας από τους διακομιστές του συμπλέγματος δεν θα συμφωνήσει σε ποιο κλειδί θα χρησιμοποιηθεί. Το αποτέλεσμα είναι ότι, εάν ένας διακομιστής δημιουργεί ένα ωφέλιμο φορτίο __VACVASAA που καταναλώνει ένας διαφορετικός διακομιστής, ο καταναλωτής θα αντιμετωπίσετε μια αποτυχία επικύρωσης MAC.

  • Ανάλυση 1A: δημιουργία ρητής < μηχανι > στοιχείο Προσθέτοντας ένα στοιχείο ρητή < μηχανή > στο αρχείο Web. config της εφαρμογής, ο προγραμματιστής λέει ASP.NET να μην χρησιμοποιήσετε το κλειδί κρυπτογράφησης που δημιουργείται αυτόματα. Ανατρέξτε στο προσάρτημα A για οδηγίες σχετικά με τον τρόπο δημιουργίας ενός στοιχείου < μηχανή >. Αφού προστεθεί αυτό το στοιχείο στο αρχείο Web. config, ανααναπτύξετε την εφαρμογή σε κάθε διακομιστή στο σύμπλεγμα. Σημείωση Ορισμένες υπηρεσίες φιλοξενίας Web, όπως οι τοποθεσίες Web Microsoft Azure, λαμβάνουν μέτρα για το συγχρονισμό του κλειδιού που δημιουργείται αυτόματα από κάθε εφαρμογή σε όλους τους διακομιστές του back-end. Αυτό επιτρέπει σε εφαρμογές που δεν έχουν καθορίσει ένα σαφές στοιχείο < μηχανή > για να συνεχίσετε να εργάζεστε σε αυτά τα περιβάλλοντα, ακόμη και αν η εφαρμογή εκτελείται σε ένα σύμπλεγμα. Εάν η αίτησή σας εκτελείται σε υπηρεσία φιλοξενίας τρίτων κατασκευαστών, επικοινωνήστε με τον πάροχο φιλοξενίας για να εξακριβώσετε αν αυτή η κατάσταση ισχύει για εσάς.

  • Ανάλυση 1b: Ενεργοποίηση συσχέτισης στη μονάδα εξισορρόπησης φόρτου Εάν οι τοποθεσίες σας λειτουργούν πίσω από μια μονάδα εξισορρόπησης φόρτου, μπορείτε να ενεργοποιήσετε τη συσχέτιση διακομιστή για να επιλύσετε προσωρινά το ζήτημα. Αυτό διασφαλίζει ότι κάθε δεδομένο πρόγραμμα-πελάτης αλληλεπιδρά μόνο με έναν φυσικό διακομιστή πίσω από τη μονάδα εξισορρόπησης φόρτου, έτσι ώστε όλα τα κρυπτογραφικά φορτία να δημιουργούνται και να καταναλώνονται από τον ίδιο διακομιστή. Αυτό δεν πρέπει να θεωρηθεί μακροπρόθεσμη λύση στο πρόβλημα. Ακόμα και όταν είναι ενεργοποιημένη η συσχέτιση διακομιστή, οι περισσότερες balancers φόρτωσης θα ανακατευθύνει τον υπολογιστή-πελάτη σε διαφορετικό φυσικό διακομιστή, εάν ο αρχικός διακομιστής στον οποίο έχουν γίνει αποσύνδεση των balancers φόρτωσης αποσυνδεθεί. Αυτό έχει ως αποτέλεσμα το νέο διακομιστή για να απορρίψετε κρυπτογραφικά φορτία (όπως __MINTOSNOA, φόρμες εισιτηρίων ελέγχου ταυτότητας, διακριτικά MVCs αντιπλαστογραφίες και άλλες υπηρεσίες) που έχει το πρόγραμμα-πελάτης αυτήν τη στιγμή. Η χρήση ενός στοιχείου ρητής < μηχανι > και η εκ νέου ανάπτυξη της εφαρμογής θα πρέπει να προτιμάται μέσω της ενεργοποίησης συσχέτισης διακομιστή.

Αιτία 2: η διεργασία εργασίας χρησιμοποιεί την ταυτότητα χώρου συγκέντρωσης εφαρμογών IIS 7,0

Υπηρεσίες πληροφοριών Internet (IIS) 7,0 (Windows Vista, Windows Server 2008) εισήγαγε την ταυτότητα του χώρου συγκέντρωσης εφαρμογών, ένα νέο μηχανισμό απομόνωσης που βοηθά στην παροχή αυξημένης ασφάλειας για διακομιστές που εκτελούν εφαρμογές ASP.NET. Ωστόσο, οι τοποθεσίες που εκτελούνται με την ταυτότητα του χώρου συγκέντρωσης εφαρμογών δεν έχουν πρόσβαση στο μητρώο HKCU. Σε αυτό το σημείο, ο χρόνος εκτέλεσης ASP.NET αποθηκεύει τα κλειδιά < μηχανή > που δημιουργούνται αυτόματα. Το αποτέλεσμα είναι ότι ASP.NET δεν μπορεί να επιμείνει το κλειδί που δημιουργείται αυτόματα όταν γίνεται επαναφορά του χώρου συγκέντρωσης εφαρμογών. Επομένως, κάθε φορά που γίνεται επαναφορά του W3wp. exe, δημιουργείται ένα νέο προσωρινό κλειδί. Σημείωση Αυτό δεν είναι ένα ζήτημα στο IIS 7,5 (Windows 7, Windows Server 2008 R2) και νεότερες εκδόσεις. Σε αυτές τις εκδόσεις των υπηρεσιών IIS, ASP.NET μπορεί να επιμείνει τα κλειδιά Auto που δημιουργούνται σε μια διαφορετική θέση που επιβιώνει επαναφορά χώρου συγκέντρωσης εφαρμογών.

  • Ανάλυση 2A: χρήση του βοηθητικού προγράμματος Aspnet_regiis Οι εγκαταστάσεις ASP.NET περιέχουν ένα βοηθητικό πρόγραμμα, Aspnet_regiis. exe. Αυτό το βοηθητικό πρόγραμμα επιτρέπει ASP.NET διασύνδεση με τις υπηρεσίες IIS για να εκτελέσετε τις ρυθμίσεις παραμέτρων που απαιτούνται για την εκτέλεση μιας διαχειριζόμενης εφαρμογής. Μία από αυτές τις διαμορφώσεις δημιουργεί τα απαραίτητα κλειδιά στην ομάδα μητρώου για να ενεργοποιήσετε την επιμονή των κλειδιών μηχανήματος που δημιουργούνται αυτόματα. Πρώτα, πρέπει να προσδιορίσετε το χώρο συγκέντρωσης εφαρμογών που χρησιμοποιεί η τοποθεσία σας. Αυτό μπορεί να προσδιοριστεί με τη χρήση του βοηθητικού προγράμματος inetmgr που περιλαμβάνεται με τις υπηρεσίες IIS. Επιλέξτε την τοποθεσία σας στην προβολή δέντρου στα αριστερά, κάντε δεξιό κλικ στη Διαχείριση website και, στη συνέχεια, κάντε κλικ στο κουμπί Σύνθετες ρυθμίσεις. Το παράθυρο διαλόγου που εμφανίζεται θα εμφανίσει το όνομα του χώρου συγκέντρωσης εφαρμογών. Ρυθμίσεις για προχωρημένους Για την σκαλωσιά τα κατάλληλα κλειδιά μητρώου για ένα χώρο συγκέντρωσης εφαρμογών ASP.NET 4,0, ακολουθήστε τα εξής βήματα:

    1. Ανοίξτε μια γραμμή εντολών διαχείρισης.

    2. Εντοπίστε τον κατάλληλο κατάλογο, ανάλογα με το αν ο χώρος συγκέντρωσης εφαρμογών είναι 32-bit ή 64-bit:

      • Χώρος συγκέντρωσης εφαρμογών 32-bit: CD/d%windir%\Microsoft.NET\Framework\v4.0.30319

      • Χώρος συγκέντρωσης εφαρμογών 64-bit: CD/d%windir%\Microsoft.NET\Framework64\v4.0.30319

    3. Μετακινηθείτε στον κατάλογο, πληκτρολογήστε την ακόλουθη εντολή και, στη συνέχεια, πιέστε το πλήκτρο ENTER:

      Aspnet_regiis-GA "διακομιστής IIS

    Εάν ο χώρος συγκέντρωσης εφαρμογών είναι ένα ASP.NET 2,0 ή 3,5 χώρο συγκέντρωσης εφαρμογών, ακολουθήστε τα εξής βήματα:

    1. Ανοίξτε μια γραμμή εντολών διαχείρισης.

    2. Εντοπίστε τον κατάλληλο κατάλογο, ανάλογα με το αν ο χώρος συγκέντρωσης εφαρμογών είναι 32-bit ή 64-bit:

      • Χώρος συγκέντρωσης εφαρμογών 32-bit: CD/d%windir%\Microsoft.NET\Framework\v2.0.50727

      • Χώρος συγκέντρωσης εφαρμογών 64-bit: CD/d%windir%\Microsoft.NET\Framework64\v2.0.50727

    3. Μετακινηθείτε στον κατάλογο, πληκτρολογήστε την ακόλουθη εντολή και, στη συνέχεια, πιέστε το πλήκτρο ENTER:

      Aspnet_regiis-GA "διακομιστής IIS

    Για παράδειγμα, εάν ο χώρος συγκέντρωσης εφαρμογών ονομάζεται το χώρο συγκέντρωσης εφαρμογών μου (όπως στην προηγούμενη εικόνα), εκτελέστε την ακόλουθη εντολή:

    Aspnet_regiis-GA "υπηρεσίες IIS APPPOOL\My app χώρο συγκέντρωσης" Σημείωση Οι υπηρεσίες συστήματος APPHOSTSC και ήταν ίσως πρέπει να εκτελούνται για το βοηθητικό πρόγραμμα Aspnet_regiis για να επιλύσετε κατάλληλα τα ονόματα των υπηρεσιών IIS APPPOOL \ *.

  • Ανάλυση 2B: δημιουργία ενός στοιχείου ρητής < μηχανι > Προσθέτοντας ένα στοιχείο ρητή < μηχανή > στο αρχείο Web. config της εφαρμογής, ο προγραμματιστής λέει ASP.NET να μην χρησιμοποιήσετε το κλειδί κρυπτογράφησης που δημιουργείται αυτόματα. Ανατρέξτε στο προσάρτημα A για οδηγίες σχετικά με τον τρόπο δημιουργίας ενός στοιχείου < μηχανή >.

Αιτία 3: ο χώρος συγκέντρωσης εφαρμογών έχει ρυθμιστεί με τη χρήση Load userprofile = FALSE

Εάν ο χώρος συγκέντρωσης εφαρμογών εκτελείται με προσαρμοσμένη ταυτότητα, οι υπηρεσίες IIS ενδέχεται να μην έχουν φορτώσει το προφίλ χρήστη για την ταυτότητα. Αυτό έχει την παρενέργεια της καθιστώντας το μητρώο HKCU μη διαθέσιμο για ASP.NET να εξακολουθήσει να παραμένει το auto-δημιουργούνται < Μηχανηκλειδι >. Επομένως, ένα νέο κλειδί που δημιουργείται αυτόματα θα δημιουργηθεί κάθε φορά που γίνεται επανεκκίνηση της εφαρμογής. Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα προφίλ χρήστη στην τοποθεσία Web της Microsoft.

  • Ανάλυση 3A: χρήση του βοηθητικού προγράμματος Aspnet_regiis Οι οδηγίες για αυτό είναι οι ίδιες με την ανάλυση 2α. Δείτε αυτή την ενότητα για περισσότερες πληροφορίες.

  • Ανάλυση 3B: Χρησιμοποιήστε μια ρητή < μηχανή > Προσθέτοντας ένα στοιχείο ρητή < μηχανή > στο αρχείο Web. config της εφαρμογής, ο προγραμματιστής λέει ASP.NET να μην χρησιμοποιήσετε το κλειδί κρυπτογράφησης που δημιουργείται αυτόματα. Ανατρέξτε στο προσάρτημα A για οδηγίες σχετικά με τον τρόπο δημιουργίας ενός στοιχείου < μηχανή >.

  • Ανάλυση 3c: παροχή των απαιτούμενων κλειδιών μητρώου HKCU με μη αυτόματο τρόπο Εάν δεν μπορείτε να εκτελέσετε το βοηθητικό πρόγραμμα Aspnet_regiis, μπορείτε να χρησιμοποιήσετε μια δέσμη ενεργειών του Windows PowerShell για την παροχή των κατάλληλων κλειδιών μητρώου στο HKCU. Βλέπε προσάρτημα β για περισσότερες πληροφορίες.

  • Ανάλυση 3D: Ορισμός Load userprofile = TRUE για αυτόν το χώρο συγκέντρωσης εφαρμογών Μπορείτε επίσης να ενεργοποιήσετε τη φόρτωση του προφίλ χρήστη μέσα σε αυτόν το χώρο συγκέντρωσης εφαρμογών. Αυτό κάνει την ομάδα μητρώου HKCU, προσωρινό φάκελο και άλλες θέσεις αποθήκευσης που αφορούν το χρήστη που είναι διαθέσιμες στην εφαρμογή. Ωστόσο, αυτό μπορεί να προκαλέσει αυξημένη χρήση δίσκου ή μνήμης για τη διεργασία εργασίας. Ανατρέξτε στο στοιχείο για περισσότερες πληροφορίες σχετικά με τον τρόπο ενεργοποίησης αυτής της ρύθμισης.

Αιτία 4: η ιδιότητα Page.

Οι προγραμματιστές λογισμικού μπορούν να αποφασίσουν να χρησιμοποιήσουν τη σελίδα. κατάσταση ιδιότητας user Key για να προσθέσετε την προστασία πλαστογράφησης αιτήσεων για την καταχώρηση στο πεδίο __setoso_. Εάν χρησιμοποιείτε τη σελίδα. ιδιότητα User Key, συνήθως ορίζεται σε μια τιμή όπως το όνομα χρήστη του τρέχοντος χρήστη ή το αναγνωριστικό περιόδου λειτουργίας του χρήστη. Τα πρότυπα έργου για εφαρμογές WebForms στο Microsoft Visual Studio 2012 και νεότερες εκδόσεις περιέχουν δείγματα που χρησιμοποιούν αυτήν την ιδιότητα. Δείτε τη σελίδα. θέμα ιδιότητας user Key στην τοποθεσία Web του δικτύου προγραμματιστών της Microsoft (MSDN) για περισσότερες πληροφορίες. Εάν έχει καθοριστεί η ιδιότητα user Key , η τιμή του έχει εγγραφεί στο __vetvoma κατά τη διάρκεια της γενιάς. Όταν καταναλώνεται το πεδίο __Setetsoma, ο διακομιστής ελέγχει την ιδιότητα του user Key της τρέχουσας σελίδας και την επικυρώνει με την τιμή που χρησιμοποιήθηκε για τη δημιουργία του πεδίου __vowsetetvor. Εάν οι τιμές δεν ταιριάζουν, η αίτηση απορρίπτεται ως δυνητικά κακόβουλη. Ένα παράδειγμα μιας αποτυχίας που σχετίζεται με την οθόνη UserKey θα είναι ένας υπολογιστής-πελάτης που έχει δύο καρτέλες ανοιχτές στο πρόγραμμα περιήγησης. Ο υπολογιστής-πελάτης είναι συνδεδεμένος ως χρήστης α, και στην πρώτη καρτέλα, μια σελίδα αποδίδεται με μια __VETETS_ΟΘΌΝΗ του οποίου η ιδιότητα User Key περιέχει "χρήστης α." Στη δεύτερη καρτέλα, ο υπολογιστής-πελάτης αποσυνδέεται και, στη συνέχεια, συνδέεται ξανά ως χρήστης B. Ο υπολογιστής-πελάτης επιστρέφει στην πρώτη καρτέλα και υποβάλλει τη φόρμα. Η ιδιότητα User Key μπορεί να περιέχει "χρήστη B" (επειδή αυτό λέει το cookie ελέγχου ταυτότητας του υπολογιστή-πελάτη). Ωστόσο, το πεδίο __VOWOWI που υποβλήθηκε από τον υπολογιστή-πελάτη περιέχει "χρήστης α." Αυτή η ασυμφωνία προκαλεί την αποτυχία.

  • Ανάλυση 4A: Βεβαιωθείτε ότι η οθόνη UserKey έχει ρυθμιστεί σωστά Εάν η εφαρμογή σας χρησιμοποιεί την ιδιότητα user Key , επαληθεύστε ότι η τιμή της ιδιότητας είναι η ίδια, όταν δημιουργείται η κατάσταση προβολής και όταν καταναλώνεται. Εάν χρησιμοποιείτε το όνομα χρήστη του τρέχοντος συνδεδεμένου χρήστη, βεβαιωθείτε ότι ο χρήστης εξακολουθεί να είναι συνδεδεμένος και ότι η ταυτότητα του χρήστη δεν έχει αλλάξει τη στιγμή της επιστροφής. Εάν χρησιμοποιείτε το αναγνωριστικό περιόδου λειτουργίας του τρέχοντος χρήστη, βεβαιωθείτε ότι η περίοδος λειτουργίας δεν έχει λήξει. Εάν εκτελείτε σε περιβάλλον συμπλέγματος, βεβαιωθείτε ότι τα στοιχεία < μηχανή > ταιριάζουν. Ανατρέξτε στο προσάρτημα A για οδηγίες σχετικά με τον τρόπο δημιουργίας αυτών των στοιχείων.

Προσάρτημα α: Πώς να δημιουργήσετε ένα στοιχείο < μηχανή >

Προειδοποίηση ασφαλείας Υπάρχουν πολλές τοποθεσίες Web που θα δημιουργήσουν ένα στοιχείο < μηχανή > κλειδί για εσάς με το κλικ ενός κουμπιού. Ποτέ μην χρησιμοποιείτε ένα στοιχείο < μηχανή > που αποκτήσατε από μία από αυτές τις τοποθεσίες. Είναι αδύνατο να γνωρίζουμε αν αυτά τα κλειδιά δημιουργήθηκαν με ασφάλεια ή αν καταγράφονται σε μια μυστική βάση δεδομένων. Θα πρέπει να χρησιμοποιείτε μόνο τα στοιχεία ρύθμισης παραμέτρων < μηχανι > που δημιουργήσατε εσείς οι ίδιοι.

Για να δημιουργήσετε ένα στοιχείο < Μηχανέςkey > μόνοι σας, μπορείτε να χρησιμοποιήσετε την ακόλουθη δέσμη ενεργειών του Windows PowerShell :

# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
  [CmdletBinding()]
  param (
    [ValidateSet("AES", "DES", "3DES")]
    [string]$decryptionAlgorithm = 'AES',
    [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
    [string]$validationAlgorithm = 'HMACSHA256'
  )
  process {
    function BinaryToHex {
        [CmdLetBinding()]
        param($bytes)
        process {
            $builder = new-object System.Text.StringBuilder
            foreach ($b in $bytes) {
              $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
            }
            $builder
        }
    }
    switch ($decryptionAlgorithm) {
      "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
      "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
      "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
    }
    $decryptionObject.GenerateKey()
    $decryptionKey = BinaryToHex($decryptionObject.Key)
    $decryptionObject.Dispose()
    switch ($validationAlgorithm) {
      "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
      "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
      "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
      "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
      "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
    }
    $validationKey = BinaryToHex($validationObject.Key)
    $validationObject.Dispose()
    [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
      "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
      $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
      $validationAlgorithm.ToUpperInvariant(), $validationKey)
  }
}

Για εφαρμογές 4,0 ASP.NET, μπορείτε απλά να καλέσετε Δημιουργία-μηχάνημα κλειδί χωρίς παραμέτρους για να δημιουργήσετε ένα < μηχανεσ > στοιχείο ως εξής:

PS> Generate-MachineKey
<machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />

ASP.NET 2,0 και 3,5 εφαρμογές δεν υποστηρίζουν HMACSHA256. Αντίθετα, μπορείτε να καθορίσετε SHA1 για να δημιουργήσετε ένα συμβατό στοιχείο < μηχανή > ως εξής:

PS> Generate-MachineKey -validation sha1
<machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />

Μόλις έχετε ένα στοιχείο < μηχανikey >, μπορείτε να το τοποθετήσετε στο αρχείο Web. config. Το στοιχείο < μηχανι > είναι έγκυρο μόνο στο αρχείο Web. config στη ρίζα της εφαρμογής σας και δεν είναι έγκυρο σε επίπεδο υποφακέλου.

<configuration>
  <system.web>
    <machineKey ... />
  </system.web>
</configuration>

Για μια πλήρη λίστα των υποστηριζόμενων αλγορίθμων, εκτελέστε Βοήθεια δημιουργία-μηχάνημα κλειδί από τη γραμμή εντολών του Windows PowerShell.

Προσάρτημα B: προμήθεια του μητρώου για να διατηρηθούν τα κλειδιά που δημιουργούνται αυτόματα

Από προεπιλογή, επειδή τα πλήκτρα αυτόματης δημιουργίας ASP. NET διατηρούνται στο μητρώο HKCU, αυτά τα κλειδιά ενδέχεται να χαθούν, εάν το προφίλ χρήστη δεν έχει φορτωθεί στη διαδικασία εργασίας των υπηρεσιών IIS και, στη συνέχεια, ο χώρος συγκέντρωσης εφαρμογών ανακυκλώνεται. Αυτό το σενάριο θα μπορούσε να επηρεάσει κοινόχρηστες υπηρεσίες παροχής φιλοξενίας που εκτελούν σύνολα εφαρμογών ως τυπικούς λογαριασμούς χρήστη των Windows. Για να επιλύσετε αυτήν την κατάσταση, ASP.NET ενεργοποιεί την επιμονή των κλειδιών που δημιουργούνται αυτόματα στο μητρώο HKLM αντί για το μητρώο HKCU. Αυτό συνήθως εκτελείται με τη χρήση του βοηθητικού προγράμματος Aspnet_regiis (βλ. οδηγίες στην ενότητα "Προτεινόμενη αντιμετώπιση 2A: χρήση του βοηθητικού προγράμματος Aspnet_regiis"). Ωστόσο, για τους διαχειριστές που δεν θέλουν να εκτελέσετε αυτό το βοηθητικό πρόγραμμα, μπορεί να χρησιμοποιηθεί η ακόλουθη δέσμη ενεργειών του Windows PowerShell :

# Provisions the HKLM registry so that the specified user account can persist auto-generated machine keys.
function Provision-AutoGenKeys {
  [CmdletBinding()]
  param (
    [ValidateSet("2.0", "4.0")]
    [Parameter(Mandatory = $True)]
    [string] $frameworkVersion,
    [ValidateSet("32", "64")]
    [Parameter(Mandatory = $True)]
    [string] $architecture,
    [Parameter(Mandatory = $True)]
    [string] $upn
  )
  process {
    # We require administrative permissions to continue.
    if (-Not (new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Error "This cmdlet requires Administrator permissions."
        return
    }
    # Open HKLM with an appropriate view into the registry
    if ($architecture -eq "32") {
        $regView = [Microsoft.Win32.RegistryView]::Registry32;
    } else {
        $regView = [Microsoft.Win32.RegistryView]::Registry64;
    }
    $baseRegKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView)
    # Open ASP.NET base key
    if ($frameworkVersion -eq "2.0") {
        $expandedVersion = "2.0.50727.0"
    } else {
        $expandedVersion = "4.0.30319.0"
    }
    $aspNetBaseKey = $baseRegKey.OpenSubKey("SOFTWARE\Microsoft\ASP.NET\$expandedVersion", $True)
    # Create AutoGenKeys subkey if it doesn't already exist
    $autoGenBaseKey = $aspNetBaseKey.OpenSubKey("AutoGenKeys", $True)
    if ($autoGenBaseKey -eq $null) {
        $autoGenBaseKey = $aspNetBaseKey.CreateSubKey("AutoGenKeys")
    }
    # Get the SID for the user in question, which will allow us to get his AutoGenKeys subkey
    $sid = (New-Object System.Security.Principal.WindowsIdentity($upn)).User.Value
    # SYSTEM, ADMINISTRATORS, and the target SID get full access
    $regSec = New-Object System.Security.AccessControl.RegistrySecurity
    $regSec.SetSecurityDescriptorSddlForm("D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GA;;;$sid)")
    $userAutoGenKey = $autoGenBaseKey.OpenSubKey($sid, $True)
    if ($userAutoGenKey -eq $null) {
        # Subkey didn't exist; create and ACL appropriately
        $userAutoGenKey = $autoGenBaseKey.CreateSubKey($sid, [Microsoft.Win32.RegistryKeyPermissionCheck]::Default, $regSec)
    } else {
        # Subkey existed; make sure ACLs are correct
        $userAutoGenKey.SetAccessControl($regSec)
    }
  }
}

Το παρακάτω παράδειγμα δείχνει τον τρόπο παροχής των κατάλληλων καταχωρήσεων μητρώου HKLM για ένα χώρο συγκέντρωσης εφαρμογών που εκτελείται ως χρήστης, example@contoso.com (αυτό είναι το UPN του λογαριασμού χρήστη των Windows). Αυτός ο χώρος συγκέντρωσης εφαρμογών είναι ένας χώρος συγκέντρωσης εφαρμογών 32-bit που εκτελεί το CLR v 2.0 (ASP.NET 2,0 ή 3,5).

PS> Provision-AutoGenKeys -FrameworkVersion 2.0 -Architecture 32 -UPN "example@contoso.com"

Εάν ο χώρος συγκέντρωσης εφαρμογών αντί για ένα χώρο συγκέντρωσης εφαρμογών 64-bit που εκτελεί CLR v 4.0 (ASP.NET 4,0 ή 4,5), η εντολή είναι η εξής:

PS> Provision-AutoGenKeys -FrameworkVersion 4.0 -Architecture 64 -UPN "example@contoso.com"

Παρόλο που τα κλειδιά που δημιουργούνται αυτόματα αποθηκεύονται σε HKLM, το δευτερεύον κλειδί μητρώου που διατηρεί το μυστικό κρυπτογραφικό υλικό κάθε λογαριασμού χρήστη προστίθεται σε μια λίστα ελέγχου πρόσβασης (ACL), έτσι ώστε το κρυπτογραφικό υλικό δεν είναι δυνατό να διαβαστεί από άλλους λογαριασμούς χρήστη.

Προσάρτημα γ: κρυπτογράφηση του στοιχείου < μηχανι > σε αρχεία ρύθμισης παραμέτρων

Οι διαχειριστές διακομιστή ενδέχεται να μην θέλουν άκρως ευαίσθητες πληροφορίες, όπως το < μηχανή κλειδιού > βασικό υλικό σε μορφή απλού κειμένου σε αρχεία ρύθμισης παραμέτρων. Σε αυτήν την περίπτωση, οι διαχειριστές ενδέχεται να αποφασίσουν να επωφεληθούν από μια δυνατότητα του .NET Framework γνωστή ως "προστατευμένη ρύθμιση παραμέτρων". Αυτή η δυνατότητα σάς επιτρέπει να κρυπτογραφήσετε ορισμένες ενότητες των αρχείων. config. Εάν τα περιεχόμενα αυτών των αρχείων ρύθμισης παραμέτρων αποκαλυφθούν ποτέ, τα περιεχόμενα αυτών των ενοτήτων θα παραμείνουν απόρρητα. Μπορείτε να βρείτε μια σύντομη επισκόπηση της προστατευμένης ρύθμισης παραμέτρων στην τοποθεσία MSDN στο Web. Περιέχει επίσης ένα tutorial για το πώς να προστατεύσει το < Σύνδεμα συμβολοσειρές > και < μηχανι > στοιχεία του αρχείου Web. config.

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×