Χρήση PHP σε σελίδες με επέκταση html. Φόρμα στη διάταξή σας Πώς να διαβάσετε τη σελίδα html php
Προσπαθώ να δημιουργήσω μια φόρμα σύνδεσης. Αυτός είναι ο κώδικας φόρμας HTML μου
Προσωπικά το πήρα για Π.Ο.Π.
Σημεία 4 και 5
$password = mysql_real_escape_string(stripslashes(md5($_POST["password"])));
Πρώτον, η σειρά αυτού είναι λάθος. Κατακερματίζετε $_POST["password"] και έπειταπροσπαθώντας να χρησιμοποιήσω stripslash - μετάοι κατακερματισμοί του δεν θα έχουν κάθετες. Ωστόσο, εάν προσπαθείτε να αποτρέψετε τη χρήση κάθετου (ή οτιδήποτε άλλο) στους κωδικούς πρόσβασης, θα πρέπει να τις αφαιρέσετε πριν κατακερματίσετε τη συμβολοσειρά.
Ο ακόλουθος md5 δεν πρέπει να χρησιμοποιείται ως αλγόριθμος κατακερματισμού κωδικού πρόσβασης, ο οποίος έχει διαπιστωθεί ότι είναι αδύναμος και μπορεί να είναι ωμή δύναμη για τη δημιουργία συγκρούσεων συμβολοσειρών πολύ πιο συχνά από όσο χρειάζεται.
ναι εσύ πρέπειΑποθηκεύστε κατακερματισμούς ή "δαχτυλικά αποτυπώματα" των κωδικών πρόσβασης, όχι τους ίδιους τους κωδικούς πρόσβασης, αλλά ιδανικά θέλετε να αλατίσετε και να κατακερματίσετε (τουλάχιστον με sha1) αυτούς τους κωδικούς πρόσβασης, αντί να τους ρίξετε απλώς στη συνάρτηση md5().
Και αναζητήστε "ρυθμίσεις κατακερματισμού κωδικού πρόσβασης" χρησιμοποιώντας τη μηχανή αναζήτησης της επιλογής σας.
Σημείο 6
SELECT id FROM $table WHERE όνομα χρήστη = "" . $όνομα χρήστη. "" και κωδικός = "" . $password. "";
Πρόσθεσα = που έλειπε από την αρχική ερώτηση, αλλά μέχρι εκεί δεν ταιριάζει με το όνομα χρήστη και τον κωδικό πρόσβασης στο αίτημά σας...αν κάποιος κατάφερε να λάβει μια ένεση SQL στο όνομα χρήστη σας, ο κωδικός πρόσβασης δεν θα επαληθευτεί ποτέ. Παρουσιάζω:
SELECT user.id ΑΠΟ χρήστη WHERE user.username = "fred" Ή 1 = 1 -- AND user.password = "abc123"
Είναι προτιμότερο να επιλέξετε το αναγνωριστικό χρήστη και τον κωδικό πρόσβασης δακτυλικού αποτυπώματος από τη βάση δεδομένων και στη συνέχεια να αξιολογήσετε τον κωδικό πρόσβασης στην εφαρμογή αντί να εμπιστεύεστε την επαλήθευση κωδικού πρόσβασης σε επίπεδο βάσης δεδομένων. Αυτό σημαίνει επίσης ότι μπορείτε να χρησιμοποιήσετε έναν ειδικό αλγόριθμο κατακερματισμού και αλατίσματος εντός της ίδιας της εφαρμογής για να επαληθεύσετε τους κωδικούς πρόσβασής σας.
Σημείο 7
$_SESSION["user"] = $_POST["όνομα χρήστη"];
Αποθηκεύεται απλώς το όνομα χρήστη στη συνεδρία; Αυτό δεν πρέπει να χρησιμοποιείται ως "επαληθευτής σύνδεσης" με κανέναν τρόπο, ειδικά εάν δεν υπάρχει (προφανώς) τίποτα στη συνεδρία σας που να αποτρέπει την αεροπειρατεία.
Το αναγνωριστικό περιόδου σύνδεσης μπορεί εύκολα να μυριστεί από το cookie σε πραγματικό χρόνο και αυτό είναι το μόνο που απαιτείται για να "δανειστεί" το όνομα χρήστη κάποιου άλλου. Θα πρέπει τουλάχιστον να προσπαθήσετε να μειώσετε την πιθανότητα παραβίασης συνεδρίας συνδέοντας τη διεύθυνση IP του χρήστη, τη συμβολοσειρά UserAgent ή κάποιον άλλο συνδυασμό σχετικά στατικών δεδομένων που μπορούν να συγκριθούν με κάθε σελίδα... υπάρχουν μειονεκτήματα σε σχεδόν οποιαδήποτε προσέγγιση (ειδικά , όπως έχω ήδη διαπιστώσει, εάν έχετε επισκέπτες που χρησιμοποιούν AOL), αλλά μπορείτε να κάνετε μια πιθανή 99% αποτελεσματική συνεδρία δακτυλικών αποτυπωμάτων δυνατή για να μειώσετε την αεροπειρατεία με μια πολύ μικρή πιθανότητα να μηδενιστεί κατά λάθος η περίοδος σύνδεσης του χρήστη.
Στην ιδανική περίπτωση, θα μπορούσατε επίσης να δημιουργήσετε ένα διακριτικό περιόδου λειτουργίας για να μετριαστείτε Επιθέσεις CSRFόταν ο χρήστης χρειάζεται να εκτελέσει μια «προνομιακή» ενέργεια στη βάση δεδομένων (ενημέρωση των δεδομένων του ή κάτι άλλο). Το διακριτικό μπορεί να είναι ένας εντελώς τυχαίος και μοναδικός κώδικας αποθηκευμένος σε μια βάση δεδομένων ή/και κουλουράκι SSL όταν ο χρήστης συνδέεται (με την προϋπόθεση ότι ο χρήστης δεν μπορεί να εκτελέσει ενέργειες που ενημερώνουν τη βάση δεδομένων εκτός HTTPS, καθώς αυτό απλώς θα μεταδώσει τα δεδομένα σε καθαρό κείμενο μέσω του Διαδικτύου - κάτι που θα ήταν κακή ιδέα).
Το διακριτικό τοποθετείται σε ένα κρυφό πεδίο φόρμας για οποιεσδήποτε/όλες τις φόρμες και ελέγχεται με την τιμή που είναι αποθηκευμένη στο cookie (ή στην περίοδο λειτουργίας ή στη βάση δεδομένων) όταν υποβάλλεται αυτή η φόρμα. Αυτό διασφαλίζει ότι το άτομο που υποβάλλει τη φόρμα θα έχει τουλάχιστον μια ζωντανή συνεδρία στον ιστότοπό σας.
Μπορεί να υπάρχουν πολλά προβλήματα.
Πρώτα,στη δήλωση $match σας λείπει ο τελεστής ισότητας κωδικού πρόσβασης:
$match = "SELECT id FROM $table WHERE username = "".$username."" και password"".$password."";";
Θα πρέπει να είναι:
$match = "SELECT id FROM $table WHERE username = "".$username."" και password = "".$password."";";
κατα δευτερον, εισάγετε τον κωδικό πρόσβασης στη βάση δεδομένων μετάη χρήση του με md5;
Εάν όχι, τότε το αίτημά σας προσπαθεί να αντιστοιχίσει το md5 (κωδικός πρόσβασης) με τον κωδικό πρόσβασης.
Όταν δημιουργείτε ακόμη και έναν προσωπικό ιστότοπο, δεν μπορούν όλοι να παρέχουν τα πάντα πιθανούς τρόπουςπεραιτέρω χρήση του. Είναι πολύ σημαντικό να προετοιμαστεί το έδαφος για περαιτέρω ανάπτυξη της τοποθεσίας. Εάν έχετε δημιουργήσει έναν ιστότοπο στο παρελθόν και έχετε εκχωρήσει σε όλες τις σελίδες την επέκταση .html από προεπιλογή και μόνο τότε αποφασίσατε να χρησιμοποιήσετε την PHP, τότε διαβάστε.
Προηγουμένως, για τη χρήση του SSI, τα ονόματα σελίδων ιστοτόπων έπρεπε να τελειώνουν με την επέκταση .shtml, αλλά σήμερα οι περισσότεροι διακομιστές Διαδικτύου έχουν ρυθμιστεί έτσι ώστε το SSI να μπορεί να χρησιμοποιηθεί σε σελίδες με την επέκταση .html, κάτι που είναι αρκετά βολικό. Η PHP είναι μια εντελώς διαφορετική ιστορία - η επέκταση .php είναι η προεπιλεγμένη επέκταση. Οι προγραμματιστές ιστοτόπων γνωρίζουν εκ των προτέρων τι θα χρησιμοποιηθεί δεδομένης γλώσσαςπρογραμματισμός, στο στρας έχει εκχωρηθεί η σωστή επέκταση.
Τι να κάνετε όμως όταν όλες οι σελίδες τελειώνουν με την επέκταση .html;
Αντικαταστήστε την επέκταση HTML με PHP
Αυτό μπορεί να γίνει με διάφορους τρόπους. Ο πιο προφανής τρόπος είναι να δώσετε σε όλες τις σελίδες μια επέκταση .php ή να αλλάξετε τις υπάρχουσες επεκτάσεις (.html, .shtml, κ.λπ.). Αυτή η μέθοδος έχει μειονεκτήματα. Για παράδειγμα, οι σελίδες που έχουν ήδη ευρετηριαστεί με την επέκταση .html θα πρέπει να ευρετηριαστούν ξανά μηχανές αναζήτησης. Ή ακόμα χειρότερα - τα πάντα εξωτερικοί σύνδεσμοι, τα οποία συνδέονται ρητά σε μια συγκεκριμένη σελίδα θα είναι άκυρα. Και θα πρέπει να ειδοποιήσετε τους κατόχους κάθε ιστότοπου για αυτές τις αλλαγές και να δημιουργήσετε μια άλλη σελίδα με 301 σφάλματα για κάθε σελίδα. Φυσικά, η αλλαγή μιας επέκτασης σε άλλη είναι αποδεκτή, αλλά τι γίνεται αν ο ιστότοπος έχει ήδη πολλές σελίδες και πολλούς συνδέσμους σε διαφορετικές σελίδες από άλλους ιστότοπους;
Για συνειδητό λόγο αυτή τη στιγμήόλες οι σελίδες αυτού του ιστότοπου τελειώνουν με την επέκταση html και δεν ήθελα να κάνω τις παραπάνω αλλαγές, δημιουργώντας έτσι περιττές δυσκολίες στον εαυτό μου.
Μπορείτε να το κάνετε με άλλο τρόπο. Εάν ο διακομιστής που φιλοξενεί τον ιστότοπο υποστηρίζει mod_rewrite (στις περισσότερες περιπτώσεις υποστηρίζει) και υπάρχει πρόσβαση στο αρχείο .htaccess, τότε μπορείτε να προσθέσετε τις ακόλουθες γραμμές σε αυτό ακριβώς το αρχείο:
RewriteEngine στο RewriteRule ^(.*)\.html $1\.php
Προσθέτοντας αυτόν τον κώδικα στο .htaccess, δεν χρειάζεται να ανησυχείτε. Όλες οι ζητούμενες ανύπαρκτες σελίδες με επέκταση .html θα αντικατασταθούν αυτόματα με επέκταση .php χάρη στα θαύματα του Apache. Αλλά αυτή η μέθοδος δεν είναι η μόνη. Μπορείτε να γράψετε τα ακόλουθα στο ίδιο αρχείο .htaccess:
Εφαρμογή AddHandler/x-httpd-php .php .html .htm
Κατά τη γνώμη μου ο πιο επιτυχημένος τρόπος. Αυτό κάνει τις σελίδες HTML ίσες με τις σελίδες PHP, που σημαίνει ότι όλες οι συναρτήσεις PHP μπορούν πλέον να χρησιμοποιηθούν σε σελίδες με επέκταση HTML. Εάν δεν έχετε πρόσβαση στο αρχείο .htaccess, τότε μπορείτε να γράψετε μια επιστολή στην εταιρεία φιλοξενίας και να ζητήσετε ευγενικά από τους διαχειριστές να εγγραφούν στο Διαμορφώσεις Apache(httpd.conf) την απαιτούμενη τιμή για τον ιστότοπο.
Παρεμπιπτόντως, εάν πριν από αυτό ο ιστότοπος χρησιμοποιούσε το SSI ως εξής:
τότε στη νέα κατάσταση PHP αυτός ο κώδικας πρέπει να αντικατασταθεί με:
include("file.txt"); ?>
Λοιπόν, αυτό είναι όλο, νομίζω ότι μία από τις παραπάνω μεθόδους θα βοηθήσει.
Η PHP είναι μια ενσωματωμένη γλώσσα προγραμματισμού από την πλευρά του διακομιστή. Μεγάλο μέρος της σύνταξής του είναι δανεισμένο από C, Java και Perl. Και προστέθηκαν επίσης μερικά μοναδικά χαρακτηριστικά μόνο για Συναρτήσεις PHP. Ο κύριος σκοπός αυτής της γλώσσας είναι η δημιουργία σελίδων HTML PHP που δημιουργούνται δυναμικά.
PHP σε HTML
Όταν δημιουργείτε πολύπλοκες ιστοσελίδες, θα βρεθείτε αντιμέτωποι με την ανάγκη να συνδυάσετε PHP και HTML για να ολοκληρώσετε συγκεκριμένες εργασίες. Με την πρώτη ματιά, αυτό μπορεί να φαίνεται περίπλοκο, καθώς η PHP και η HTML είναι δύο ανεξάρτητοι κλάδοι, αλλά δεν είναι έτσι. Η PHP έχει σχεδιαστεί για να αλληλεπιδρά με την HTML και ο κώδικάς της μπορεί να συμπεριληφθεί στη σήμανση σελίδας.
Ο κώδικας PHP περιλαμβάνεται σε σελίδες HTML χρησιμοποιώντας ειδικές ετικέτες. Όταν ένας χρήστης ανοίγει μια σελίδα, ο διακομιστής επεξεργάζεται τον κώδικα PHP και στη συνέχεια στέλνει το αποτέλεσμα της επεξεργασίας (όχι το Κώδικας PHP) στο πρόγραμμα περιήγησης.
Η HTML και η PHP συνδυάζονται αρκετά εύκολα. Οποιοδήποτε μέρος ενός σεναρίου PHP εκτός ετικετώναγνοείται από τον μεταγλωττιστή PHP και μεταβιβάζεται απευθείας στο πρόγραμμα περιήγησης. Αν κοιτάξετε το παρακάτω παράδειγμα, μπορείτε να δείτε ότι ένα πλήρες σενάριο PHP μπορεί να μοιάζει με αυτό:
Γεια σας σήμερα.