Επαλήθευση φόρμαρχου PHP
- Προηγούμενη Σελίδα PHP Επεξεργασία Φόρμας
- Επόμενη Σελίδα PHP Απαιτούμενα Πεδία Φόρμας
Αυτή η ενότητα και η επόμενη εξηγούν πώς να χρησιμοποιήσετε το PHP για την επαλήθευση δεδομένων φόρμας.
Επαλήθευση φόρμαρχου PHP
Συμβουλή:Επισημείωση: Δώστε προσοχή στην ασφάλεια όταν χειρίζεστε φόρμαρχους PHP!
Αυτές οι σελίδες θα δείξουν πώς να χειριστείτε ασφαλώς τα φόρμαρχους PHP. Η κατάλληλη επαλήθευση των δεδομένων του φόρμαρχου είναι σημαντική για την αποτροπή των黑客 και των ανεπιθύμητων μηνυμάτων!
Οι φόρμαρχοι HTML που θα χρησιμοποιήσουμε περιέχουν διάφορα πεδία εισαγωγής: υποχρεωτικά και προαιρετικά πεδία κειμένου, κουμπιά επιλογής και κουμπί υποβολής:
Ο φόρμαρχος που χρησιμοποιούμε χρησιμοποιεί τους εξής κανόνες επαλήθευσης:
Πεδίο | Κανόνες επαλήθευσης |
---|---|
Όνομα | Απαιτείται. Πρέπει να περιέχει γράμματα και κενά. |
Απαιτείται. Πρέπει να περιέχει έγκυρη διεύθυνση email (περιλαμβανομένων των @ και .). | |
Ιστότοπος | Προαιρετικό. Αν συμπληρωθεί, πρέπει να περιέχει έγκυρη διεύθυνση URL. |
Σχόλιο | Προαιρετικό. Πολυγραμμικό πεδίο εισαγωγής κειμένου (κουτί κειμένου). |
Γένους | Απαιτείται. Πρέπει να επιλεγεί μια επιλογή. |
Πρώτα δούμε το καθαρό HTML κώδικα του φόρμαρχου:
Πεδία κειμένου
Το όνομα, το email και ο ιστότοπος είναι στοιχεία εισαγωγής κειμένου, το πεδίο comment είναι κουτί κειμένου. Το HTML κώδικα είναι το εξής:
Όνομα: <input type="text" name="name"> E-mail: <input type="text" name="email"> Ιστότοπος: <input type="text" name="website"> Σχόλιο: <textarea name="comment" rows="5" cols="40"></textarea>
Κουμπιά επιλογής
Το πεδίο gender είναι κουμπί επιλογής, το HTML κώδικα είναι το εξής:
Γένους: <input type="radio" name="gender" value="female">Γυναίκα <input type="radio" name="gender" value="male">Άνδρας
Στοιχεία φόρμαρχου
Το HTML κώδικα του φόρμαρχου είναι το εξής:
<form method="post" action="<?php echo htmlspecialchars(<?php echo $_SERVER["PHP_SELF"]);?>>
Όταν υποβάλλεται αυτός ο φόρμαρχος, τα δεδομένα του φόρμαρχου στέλνονται μέσω method="post".
Τι είναι η μεταβλητή $_SERVER["PHP_SELF"];
Το $_SERVER["PHP_SELF"] είναι μια υπεργлобάλη μεταβλητή που επιστρέφει το όνομα του αρχείου του εκτελούμενου κώδικα.
Επομένως, το $_SERVER["PHP_SELF"] στέλνει τα δεδομένα του φόρμαρχου στην ίδια σελίδα, αντί να μεταβεί σε άλλη σελίδα. Με αυτόν τον τρόπο, ο χρήστης μπορεί να λάβει πληροφορίες για τα σφάλματα στην σελίδα του φόρμαρχου.
Τι είναι η συνάρτηση htmlspecialchars()?
Η συνάρτηση htmlspecialchars() μετατρέπει τα ειδικά χαρακτήρες σε HTML entity. Αυτό σημαίνει ότι τα χαρακτήρες όπως < και > θα αντικατασταθούν από < και >. Αυτό αποτρέπει τους επιτιθέμενους να εκμεταλλευτούν HTML ή JavaScript κώδικα (cross-site scripting attack) για να εκτελέσουν τον κώδικα.
Σημαντική συμβουλή για την ασφάλεια των φόρμας PHP
Η μεταβλητή $_SERVER["PHP_SELF"] μπορεί να εκμεταλλευτεί από τους hakker!
Αν η σελίδα σας χρησιμοποιεί το PHP_SELF, οι χρήστες μπορούν να εισάγουν τελεία και να εκτελέσουν cross-site scripting (XSS).
Συμβουλή:Το cross-site scripting (XSS) είναι ένας τύπος λάθους ασφαλείας υπολογιστών, συχνά παρατηρούμενος σε εφαρμογές Web. Το XSS επιτρέπει στους επιτιθέμενους να εισάγουν κώδικα πελάτη σε ιστοσελίδες που επισκέπτονται άλλοι χρήστες.
Ας υποθέσουμε ότι σε μια σελίδα μας με το όνομα "test_form.php" υπάρχει ο παρακάτω φόρμας:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Τώρα, αν ο χρήστης εισέρχεται σε μια κανονική URL του αναγνώστη URL: "http://www.example.com/test_form.php", ο παραπάνω κώδικας θα μετατραπεί σε:
<form method="post" action="test_form.php">
Παραμένει μέχρι τώρα κανονικό.
Ωστόσο, αν ο χρήστης πληκτρολογήσει την παρακάτω URL στο αναγνώστη URL:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Σε αυτή την περίπτωση, ο παραπάνω κώδικας θα μετατραπεί σε:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Αυτός ο κώδικας προσθέτει ένα σενάριο και μια εντολή ειδοποίησης. Και όταν αυτή η σελίδα φορτώνει, θα εκτελεστεί ο κώδικας JavaScript (ο χρήστης θα δει ένα παράθυρο ειδοποίησης). Αυτό είναι απλώς ένα απλό και αθώο παράδειγμα για το πώς χρησιμοποιείται η μεταβλητή PHP_SELF.
Πρέπει να είστε συνειδητοποιημένοι Το σήμα <script> μπορεί να προσθέσει οποιοδήποτε κώδικα JavaScript!黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等。
如果避免 $_SERVER["PHP_SELF"] 被利用?
通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。
表单代码是这样的:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
无法利用,没有危害!
通过 PHP 验证表单数据
我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。
在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:
<script>location.href('http://www.hacked.com')</script>
- 代码不会执行,因为会被保存为转义代码,就像这样:
<script>location.href('http://www.hacked.com')</script>
现在这条代码显示在页面上或 e-mail 中是安全的。
在用户提交该表单时,我们还要做两件事:
- (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
- (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)
接下来我们创建一个检查函数(相比一遍遍地写代码,这样效率更好)。
我们把函数命名为 test_input()。
现在,我们能够通过 test_input() 函数检查每个 $_POST 变量,脚本是这样的:
实例
<?php // 定义变量并设置为空值 $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Παρακαλώ σημειώστε ότι στο κεφάλι του σκευαστού ελέγχουμε αν η φόρμα χρησιμοποιεί το $_SERVER["REQUEST_METHOD"] για υποβολή. Αν το REQUEST_METHOD είναι POST, τότε η φόρμα έχει υποβληθεί - και πρέπει να την επαληθεύσουμε. Αν δεν έχει υποβληθεί, πήγαινε στην επαλήθευση και εμφανίσει μια κενή φόρμα.
Ωστόσο, στον παραπάνω παράδειγμα, όλα τα πεδία εισαγωγής είναι προαιρετικά. Ε即使在 χρήστης δεν εισάγει δεδομένα, το σενάριο μπορεί να λειτουργήσει κανονικά.
Το επόμενο βήμα είναι να δημιουργήσετε τα πεδία εισαγωγής που απαιτούνται και να δημιουργήσετε τα μηνύματα σφαλμάτων που χρειάζονται.
- Προηγούμενη Σελίδα PHP Επεξεργασία Φόρμας
- Επόμενη Σελίδα PHP Απαιτούμενα Πεδία Φόρμας