Celibate auth php. HTTP Εγκατάσταση προστασίας σε σελίδα με χρήση MySQL και PHP. Κείμενο πηγής του αρχείου .htaccess
Για να στείλετε ένα μήνυμα "Απαιτείται έλεγχος ταυτότητας" στο πρόγραμμα περιήγησης πελάτη, το οποίο με τη σειρά του θα προκαλέσει την εμφάνιση ενός πλαισίου διαλόγου για την εισαγωγή του ονόματος χρήστη και του κωδικού πρόσβασης. Αφού ο πελάτης εισαγάγει το όνομα και τον κωδικό πρόσβασής του, το σενάριο θα κληθεί ξανά, αλλά με τις προκαθορισμένες μεταβλητές PHP_AUTH_USER, PHP_AUTH_PW και AUTH_TYPE, οι οποίες περιέχουν αντίστοιχα το όνομα χρήστη, τον κωδικό πρόσβασης και τον τύπο ελέγχου ταυτότητας. Αυτές οι μεταβλητές βρίσκονται στον πίνακα $_SERVER και $HTTP_SERVER_VARS. Προς το παρόν υποστηρίζεται μόνο ο "Βασικός" έλεγχος ταυτότητας. Μπορείτε επίσης να διαβάσετε μια πιο λεπτομερή περιγραφή της λειτουργίας επί κεφαλής() .
Ένα παράδειγμα τμήματος σεναρίου που αναγκάζει τον πελάτη να συνδεθεί για να δει τη σελίδα:
Παράδειγμα ελέγχου ταυτότητας HTTP
if (!isset($_SERVER [ "PHP_AUTH_USER" ])) ( Γεια σας ($_SERVER["PHP_AUTH_USER"]). Έχετε εισαγάγει τον κωδικό πρόσβασής σας ($_SERVER["PHP_AUTH_PW"]).
επί κεφαλής( "WWW-Authenticate: Basic realm="My Realm"");
ηχώ "Το κείμενο εστάλη όταν
εάν ο χρήστης έκανε κλικ στο κουμπί Άκυρο";
έξοδος;
) άλλο (
ηχώ"
ηχώ "
}
?>
Σημείωση συμβατότητας:Να είστε ιδιαίτερα προσεκτικοί όταν προσδιορίζετε κεφαλίδες HTTP. Για να εξασφαλιστεί η μέγιστη συμβατότητα με τον μεγαλύτερο αριθμό διαφορετικών πελατών, η λέξη "Βασικό" πρέπει να γράφεται με κεφαλαίο "Β", η περιοχή (βασίλειο) πρέπει να περικλείεται σε διπλά εισαγωγικά (όχι μονό!) και ακριβώς ένα κενό πρέπει να προηγείται ο κώδικας 401 στον τίτλο HTTP/1.0 401 .
Αντί να εμφανίζετε απλώς τις μεταβλητές PHP_AUTH_USER και PHP_AUTH_PW στην οθόνη, ίσως χρειαστεί να ελέγξετε ότι είναι σωστές. Για να το κάνετε αυτό, χρησιμοποιήστε ένα ερώτημα βάσης δεδομένων ή αναζητήστε έναν χρήστη σε ένα αρχείο dbm.
Μπορείτε να παρατηρήσετε τις λειτουργίες του προγράμματος περιήγησης Internet Explorer. Είναι πολύ επιλεκτικό σχετικά με τις παραμέτρους των μεταδιδόμενων κεφαλίδων. Καθορισμός τίτλου WWW-Authenticateπριν στείλετε την κατάσταση HTTP/1.0 401 είναι ένα μικρό κόλπο.
Ξεκινώντας με την PHP 4.3.0, για να αποτρέψετε κάποιον από το να γράψει ένα σενάριο που αποκαλύπτει τον κωδικό πρόσβασης για μια σελίδα που χρησιμοποιεί εξωτερικό έλεγχο ταυτότητας, οι μεταβλητές PHP_AUTH δεν ορίζονται εάν η σελίδα χρησιμοποιεί εξωτερικό έλεγχο ταυτότητας και έχει οριστεί σε ασφαλή λειτουργία. Ωστόσο, η μεταβλητή REMOTE_USER μπορεί να χρησιμοποιηθεί για τον έλεγχο ταυτότητας ενός εξωτερικά πιστοποιημένου χρήστη. Έτσι, μπορείτε πάντα να χρησιμοποιείτε τη μεταβλητή $_SERVER["REMOTE_USER"].
Σημείωση:Η PHP χρησιμοποιεί την οδηγία AuthType για να υποδείξει εάν χρησιμοποιείται εξωτερικός έλεγχος ταυτότητας ή όχι.
Θα πρέπει να σημειωθεί ότι όλα τα παραπάνω δεν εμποδίζουν την κλοπή κωδικών πρόσβασης σε σελίδες που απαιτούν εξουσιοδότηση από κάποιον που ελέγχει σελίδες χωρίς εξουσιοδότηση που βρίσκονται στον ίδιο διακομιστή.
Τόσο το Netscape Navigator όσο και ο Internet Explorer διαγράφουν την κρυφή μνήμη ελέγχου ταυτότητας του τρέχοντος παραθύρου για ένα δεδομένο πεδίο όταν ληφθούν από τον διακομιστή. Αυτό μπορεί να χρησιμοποιηθεί για να αναγκάσει τον χρήστη να αποσυνδεθεί και να εμφανίσει ξανά το παράθυρο διαλόγου ονόματος χρήστη και κωδικού πρόσβασης. Ορισμένοι προγραμματιστές το χρησιμοποιούν για να περιορίσουν χρονικά τις συνδέσεις ή να παρέχουν ένα κουμπί αποσύνδεσης.
Παράδειγμα ελέγχου ταυτότητας HTTP με αναγκαστική εισαγωγή νέου ζεύγους σύνδεσης/κωδικού πρόσβασης
λειτουργία authenticate() (
επί κεφαλής( "WWW-Authenticate: Basic realm="Test Authentication System"");
header("HTTP/1.0 401 Μη εξουσιοδοτημένο");
ηχώ "Πρέπει να εισαγάγετε το σωστό όνομα χρήστη και κωδικό πρόσβασης για να αποκτήσετε πρόσβαση στον πόρο \n";
έξοδος;
}
Εάν (!isset($_SERVER [ "PHP_AUTH_USER" ]) || Καλώς ορίσατε: ($_SERVER["PHP_AUTH_USER"])
($_POST [ "SeenBefore" ] == 1 && $_POST [ "OldAuth" ] == $_SERVER [ "PHP_AUTH_USER" ])) (
πιστοποιώ την αυθεντικότητα ();
}
αλλού(
ηχώ"
"
ηχώ "Προηγούμενη σύνδεση: ($_REQUEST["OldAuth"])";
ηχώ ";
ηχώ "\n";
ηχώ "\n";
ηχώ "\n";
ηχώ "
}
?>
Αυτή η συμπεριφορά δεν διέπεται από τα βασικά πρότυπα ελέγχου ταυτότητας HTTP, επομένως δεν πρέπει να βασίζεστε σε αυτήν. Οι δοκιμές έδειξαν ότι το πρόγραμμα περιήγησης Lynx δεν εκκαθαρίζει την προσωρινή μνήμη εξουσιοδότησης όταν λαμβάνει μια κατάσταση 401 από τον διακομιστή και κάνοντας κλικ στο "Πίσω" και στη συνέχεια στο "Εμπρός" με τη σειρά, είναι δυνατό να ανοίξει μια τέτοια σελίδα, υπό την προϋπόθεση ότι η απαιτούμενη εξουσιοδότηση τα χαρακτηριστικά δεν έχουν αλλάξει. Ωστόσο, ο χρήστης μπορεί να πατήσει το πλήκτρο "_" για να διαγράψει την κρυφή μνήμη ελέγχου ταυτότητας.
Θα πρέπει επίσης να σημειωθεί ότι πριν από την PHP 4.3.3, ο έλεγχος ταυτότητας HTTP δεν λειτουργούσε σε διακομιστές που εκτελούσαν Microsoft IIS, εάν η PHP είχε εγκατασταθεί ως λειτουργική μονάδα CGI, λόγω ορισμένων περιορισμών των υπηρεσιών IIS. Για να λειτουργήσει σωστά στην PHP 4.3.3+, πρέπει να επεξεργαστείτε τη ρύθμιση παραμέτρων των υπηρεσιών IIS που ονομάζεται "Directory Security". Κάντε κλικ στο "Επεξεργασία" και επιλέξτε την επιλογή "Ανώνυμη πρόσβαση", όλα τα άλλα πεδία θα πρέπει να παραμείνουν μη επιλεγμένα.
Ένας άλλος περιορισμός εάν χρησιμοποιείτε τις υπηρεσίες IIS μέσω ISAPI: οι μεταβλητές PHP_AUTH_* δεν έχουν οριστεί, αλλά ταυτόχρονα είναι διαθέσιμη η μεταβλητή HTTP_AUTHORIZATION. Παράδειγμα κώδικα που θα μπορούσατε να χρησιμοποιήσετε: list($user, $pw) = explode(":", base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)));
Σημείωση σχετικά με τις υπηρεσίες IIS::Για να λειτουργεί σωστά ο έλεγχος ταυτότητας HTTP στις υπηρεσίες IIS, η επιλογή cgi.rfc2616_headers στη διαμόρφωση PHP πρέπει να οριστεί στο 0 (η προεπιλεγμένη τιμή).
Προσοχή:Σε περίπτωση που χρησιμοποιείται προστατευμένη λειτουργία, το UID του τρέχοντος σεναρίου θα προστεθεί στο βασικό τμήμα της κεφαλίδας WWW-Authenticate.
<<< Назад | Περιεχόμενο | Εμπρός >>> |
Εάν έχετε οποιεσδήποτε άλλες ερωτήσεις ή κάτι δεν είναι ξεκάθαρο - καλώς ήρθατε στην παρέα μας | |
|
Οι webmasters που χρησιμοποιούν κάτι γραμμένο από τους ίδιους ως μηχανή ιστότοπου αργά ή γρήγορα κουράζονται να ενημερώνουν τον ιστότοπο επεξεργάζοντας αρχεία μέσω FTP ή δουλεύοντας απευθείας με τη βάση δεδομένων. Και μετά ξεκινά η συγγραφή σεναρίων διαχείρισης, τα οποία θα σας επέτρεπαν να διαχειρίζεστε τον ιστότοπο διαδραστικά με μια ευχάριστη εμφάνιση και τελικά να κάνετε τη διαδικασία ενημέρωσης πιο ευχάριστη.
Το πρώτο ερώτημα που τίθεται συνήθως σε αυτή την περίπτωση είναι το θέμα της εξουσιοδότησης. Δεν θα δώσετε σε όλους όσοι βρίσκουν τη διαχειριστική ενότητα στον ιστότοπο την ευκαιρία να κάνουν ό,τι τους έρχεται στο μυαλό. Σήμερα θα εξετάσουμε τη διαδικασία σύνταξης μιας απλής εξουσιοδότησης.
Πρώτον, μερικά διευκρινιστικά σημεία. Πρώτον, γράφουμε σε PHP, καθώς αυτή είναι η πιο κοινή γλώσσα για τη σύνταξη συστημάτων διαχείρισης ιστοσελίδων σήμερα. Και δεύτερον, προσωπικά είμαι κατά των αυτογραφικών σεναρίων που είναι υπεύθυνα για την εισαγωγή του ίδιου του κωδικού πρόσβασης σύνδεσης. Επομένως, ας μην επανεφεύρουμε τον τροχό, δηλ. δική μας αρχή εξουσιοδότησης, αλλά θα χρησιμοποιήσουμε τυπικές δυνατότητες.
Έτσι, θα χρησιμοποιήσουμε τυπικό έλεγχο ταυτότητας - ένα παράθυρο για την εισαγωγή ενός κωδικού πρόσβασης, το οποίο χρησιμοποιείται, για παράδειγμα, στο Rambler και σε πολλούς άλλους ιστότοπους.
Η δυνατότητα εισόδου στην προστατευμένη περιοχή παραμένει καθ' όλη τη διάρκεια της περιόδου λειτουργίας του παραθύρου του προγράμματος περιήγησης, αλλά αφού το κλείσετε, μπορείτε να εισέλθετε ξανά μόνο εισάγοντας το όνομα χρήστη και τον κωδικό πρόσβασής σας. Δηλαδή, χρησιμοποιώντας τον υπολογιστή σας, είναι αδύνατο να πραγματοποιήσετε παράνομες ενέργειες για λογαριασμό σας. Τι άλλο είναι καλό σε αυτή τη μέθοδο; Δεν δέχεται μεταβλητές από διακομιστές τρίτων και αφού εισαγάγετε λανθασμένα τον κωδικό πρόσβασης τρεις φορές θα πρέπει να ανανεώσετε τη σελίδα, γεγονός που καθιστά δύσκολο το χακάρισμα του συστήματος με εικασίες.
Και μοιάζει με αυτό:
Τα στοιχεία σύνδεσης που εισάγει ο χρήστης αποθηκεύονται στη μεταβλητή $PHP_AUTH_USER, ο κωδικός πρόσβασης αποθηκεύεται σε $PHP_AUTH_PW. Παρεμπιπτόντως, δώστε προσοχή στον έλεγχο της ύπαρξης μιας εγγραφής χρήστη με το ίδιο όνομα στη βάση δεδομένων - αυτό είναι ένα κρίσιμο σημείο που είναι πολύ σημαντικό να ληφθεί υπόψη. Εάν δεν υπάρχει τέτοιος έλεγχος, αυτό θα οδηγήσει σε καταστροφικά αποτελέσματα - η $row θα ισούται με μηδέν, δηλαδή, εισάγοντας ένα ανύπαρκτο όνομα χρήστη και έναν κενό κωδικό πρόσβασης, μπορείτε να μπείτε στην προστατευμένη ζώνη.
Ανάμεσα στις οδηγίες Κεφαλίδα ("HTTP/1.0 401 Μη εξουσιοδοτημένο"); και exit() ; εισάγουμε οτιδήποτε - από μια απλή φράση ότι δεν μπορείτε να έρθετε εδώ μέχρι μια πρόταση να πάτε κάπου, να πετάξετε, να τρέξετε, να σέρνετε και ούτω καθεξής. Ναι, σχεδόν ξέχασα - οι μεταβλητές $dbhost, $dbuser, $dbpasswd και $dbname αποθηκεύουν δεδομένα που παρέχουν πρόσβαση στη βάση δεδομένων και το όνομα της βάσης δεδομένων.
Παρόμοιος κώδικας πρέπει να εισαχθεί σε κάθε σελίδα της προστατευόμενης περιοχής, για παράδειγμα, μέσω του include .
Άρα είσαι προστατευμένος. Για δικό μου λογαριασμό, μπορώ επίσης να προσθέσω ότι η κωδικοποίηση με αυτόν τον τρόπο προσωπικά μου φαίνεται πολύ βολική και αξιόπιστη.
Μερικές φορές είναι απαραίτητο να το κλείσετε από εξωτερική πρόσβαση PHPσελίδα εάν κάνετε μια κλειστή περιοχή του ιστότοπου. Αυτό μπορεί να είναι κάποιες κρυφές πληροφορίες για τους πελάτες ή τους επισκέπτες του ιστότοπού σας, κάποιο είδος διαχειριστικής διεπαφής για εσάς κ.λπ. Μπορείτε να δημιουργήσετε εκατοντάδες διαφορετικές εργασίες που απαιτούν περιορισμούς πρόσβασης.
Μπορείτε να κλείσετε μια τέτοια σελίδα με πολλούς συμπληρωματικούς τρόπους:
- Προστασία κωδικού πρόσβασης (login/password) με χρήση μεταβλητών $_SERVER["PHP_AUTH_USER"]Και $_SERVER["PHP_AUTH_PW"].
- Προστασία από IPδιεύθυνση πελάτη χρησιμοποιώντας μια μεταβλητή $_SERVER["REMOTE_ADDR"].
- Προστασία από ΜΑΚδιεύθυνση σε τοπικά δίκτυα (επιπλέον της προστασίας από IP).
Ας δούμε πρώτα την πρώτη μέθοδο, η οποία είναι η κύρια. Σας επιτρέπει να αποκλείσετε την πρόσβαση στη σελίδα χρησιμοποιώντας τα στοιχεία σύνδεσης και τον κωδικό πρόσβασής σας, έτσι ώστε μόνο άτομα που γνωρίζουν τη σύνδεση και τον κωδικό πρόσβασης να έχουν πρόσβαση. Επιπλέον, μπορούν να χωριστούν σύμφωνα με αυτό το κριτήριο και, κατά συνέπεια, μπορούν να παρέχονται διαφορετικές πληροφορίες για το καθένα. Υλοποιείται με την έκδοση ειδικών πεδίων στην κεφαλίδα του πρωτοκόλλου HTTP. Ας δημιουργήσουμε μια συνάρτηση auth_send():
" ,"
Σφάλμα ελέγχου ταυτότητας
" ,"Επικοινωνήστε με τον διαχειριστή για να λάβετε τα στοιχεία σύνδεσης και τον κωδικό πρόσβασής σας.
" ,""; έξοδος; ); ?>Αυτή η λειτουργία ενημερώνει το πρόγραμμα περιήγησης ότι η πρόσβαση απαιτεί εξουσιοδότηση με χρήση σύνδεσης και κωδικού πρόσβασης. Και εμφανίζει επίσης μια σελίδα HTMLγια τον χρήστη.
" ,"
Καλως ΗΡΘΑΤΕ!
" ,"Έχετε συνδεθεί χρησιμοποιώντας τα στοιχεία σύνδεσης ",$auth_user," και τον κωδικό πρόσβασης ",$auth_pass,".
" ,""; ?>
Ο κωδικός επαλήθευσης σύνδεσης και κωδικού πρόσβασης δεν είναι πολύ περίπλοκος σε αυτήν την περίπτωση, καθώς εφαρμόζεται για ένα άτομο. Η λογική λειτουργίας είναι απλή εάν δεν υπάρχει μεταβλητή $_SERVER["PHP_AUTH_USER"]Και $_SERVER["PHP_AUTH_PW"]ή οι τιμές τους δεν ταιριάζουν με τις απαιτούμενες, τότε καλέστε τη συνάρτηση auth_send(). Μην ξεχνάτε ότι στο τέλος καλεί έξοδος, οπότε η εκτέλεση του προγράμματος σταματά.
Το επόμενο επίπεδο προστασίας υλοποιείται με φιλτράρισμα IPδιευθύνσεις του πελάτη που συνδέει. Φυσικά, στο Διαδίκτυο, πολλοί πάροχοι έχουν πρόβλημα IPπροσωρινές διευθύνσεις και αυτή η προστασία είναι άχρηστη, αλλά αν μιλάμε για εταιρικά τοπικά δίκτυα, τότε αυτός ο έλεγχος θα παρέχει πρόσθετη προστασία.
Η IP σας δεν βρέθηκε!!!"; έξοδος; ); ?>
Εδώ στη γραμμή $allowed_ipsυποδεικνύονται χωρισμένα με κενά IPδιευθύνσεις στις οποίες επιτρέπεται η πρόσβαση. Στη συνέχεια παίρνουμε τον πίνακα χρησιμοποιώντας εκραγεί()και αναζητήστε τη διεύθυνση του πελάτη από $_SERVER["REMOTE_ADDR"]. Χρησιμοποίησα τη συνάρτηση για αναζήτηση array_search(), καθώς είναι απίθανο ο κώδικάς του που εφαρμόζεται στο C να λειτουργεί κάπως πιο γρήγορα από αυτό που μπορούμε να γράψουμε στο PHPχρησιμοποιώντας βρόχους Γιαή για κάθε. Αλλά η ταχύτητα δεν είναι το κύριο πράγμα εδώ :)
Και το τελευταίο βήμα προστασίας είναι η επαλήθευση ΜΑΚδιευθύνσεις. Είναι ταξινομημένο ως παρανοϊκό και θα πρέπει να χρησιμοποιείται εάν έχετε πρόσβαση από τοπικό δίκτυο και τα δεδομένα που προστατεύετε είναι πραγματικά πολύ σημαντικά. Μέχρι στιγμής έχω εφαρμόσει αυτόν τον έλεγχο μόνο στο σύστημα Linux, λόγω της σχετικής απλότητας υλοποίησης. Αλλά μπορείτε να δοκιμάσετε να το εφαρμόσετε για οποιαδήποτε άλλη πλατφόρμα. Γράφουμε μια συνάρτηση:
Όπως έχουν ήδη καταλάβει οι χρήστες Linux, βασίζεται σε ARPπίνακα συστήματος, στον οποίο μπορείτε να προσπελάσετε χρησιμοποιώντας ένα αρχείο /proc/net/arp. Η συνάρτηση αναζητά συμβολοσειρές για τις απαιτούμενες IPδιεύθυνση και την επιστρέφει ΜΑΚδιεύθυνση:
Η IP σας=192.168.10.15 και MAC=00:04:31:E4:F8:37
Στο σύστημα WindowsΊσως υπάρχουν και κάποιοι τρόποι να το αποκτήσετε ΜΑΚαπλούστερο, αλλά από αυτά που πραγματικά λειτουργούν, αυτό είναι το συμπέρασμα ARPπίνακες συστήματος με την εντολή:
C:\WINDOWS\>arp -a Διεπαφή: 192.168.10.15 στη διεπαφή 0x1000003 Διεύθυνση IP Τύπος φυσικής διεύθυνσης 192.168.10.1 00-50-22-b0-6a-a-a-aa δυναμική 191.800003. e8 δυναμική 192.168.10.3 00-04-61-9e-26-09 δυναμική 192.168.10.5 00-0f-38-6a-b1-18 δυναμική
Μπορείτε να εφαρμόσετε μόνοι σας προστασία βάσει αυτής της διεύθυνσης, εάν τη χρειάζεστε πραγματικά :) Αλλά να θυμάστε ότι εάν έχετε μη διαχειριζόμενο εξοπλισμό στο δίκτυό σας χωρίς τη δυνατότητα σύνδεσης ΜΑΚδιευθύνσεις στη θύρα, αυτή η προστασία ενδέχεται να μην λειτουργεί, καθώς όλα τα δεδομένα ταυτοποίησής σας που χρησιμοποιούνται για προστασία (σύνδεση, κωδικός πρόσβασης, διεύθυνση IP και διεύθυνση MAC) μπορεί να είναι πλαστά.