تحقق نموذج PHP
- الصفحة السابقة PHP معالجة النموذج
- الصفحة التالية PHP نموذج النموذج الإلزامي
هذا الفصل والفصل التالي يشرحان كيفية استخدام PHP للتحقق من بيانات النموذج.
تحقق نموذج PHP
نصيحة:لا تنسى الاهتمام بالأمان عند التعامل مع نماذج PHP!
ستعرض هذه الصفحات كيفية التعامل مع نماذج PHP بشكل آمن. التحقق من بيانات نموذج HTML بشكل صحيح مهم للوقاية من الهجمات السيبرانية والبريد المزعج!
تتضمن النماذج HTML التي سنستخدمها بعد قليل أنواع متعددة من حقول الإدخال: حقول النص الإلزامية والاختيارية، أزرار الاختيار وزر التقديم:
يستخدم النموذج المذكور أعلاه قواعد التحقق التالية:
حقل | قواعد التحقق |
---|---|
الاسم | مطلوب. يجب أن يحتوي على أحرف وفراغات. |
البريد الإلكتروني | مطلوب. يجب أن يحتوي على عنوان بريد إلكتروني صالح (يحتوي على @ و .). |
الموقع الإلكتروني | اختياري. إذا تم اختياره، يجب أن يحتوي على URL صالح. |
تعليق | اختياري. حقل إدخال متعدد السطور (نصي) |
Gender | مطلوب. يجب اختيار خيار. |
دعنا نبدأ بالنظر في كود HTML النقي للنموذج هذا:
حقل نصي
الاسم، البريد الإلكتروني والموقع الإلكتروني هي عناصر إدخال نصي، والنوع هو حقل نصي.
الاسم: <input type="text" name="name"> البريد الإلكتروني: <input type="text" name="email"> الموقع الإلكتروني: <input type="text" name="website"> تعليق: <textarea name="comment" rows="5" cols="40"></textarea>
أزرار اختيار
النوع هو حقل اختياري، كود HTML الخاص به هو كالتالي:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
عناصر النموذج
كود HTML للنموذج هو كالتالي:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
عند تقديم هذا النموذج، يتم إرسال بيانات النموذج عبر method="post".
ما هو متغير $_SERVER["PHP_SELF"]؟
$_SERVER["PHP_SELF"] هو متغير عالمي أعلى، يرجع إلى اسم ملف السكربت الحالي.
لذلك،$_SERVER["PHP_SELF"] يرسل بيانات النموذج إلى الصفحة نفسها بدلاً من الانتقال إلى صفحة أخرى. بهذه الطريقة، يمكن للمستخدم الحصول على معلومات تنبيه بالخطأ على صفحة النموذج.
ما هو دالة htmlspecialchars()؟
يحول الدالة htmlspecialchars() الرموز الخاصة إلى رموز HTML. هذا يعني أن الرموز مثل < و > سيتم تحويلها إلى < و >. هذا يمكن منع الهacker من استخدام رموز HTML أو JavaScript في النماذج (هجوم عبر المواقع) لاستغلال الكود.
نصيحة مهمة حول أمان نماذج PHP
يمكن للهacker استخدام متغير $_SERVER["PHP_SELF"]!
إذا استخدمت صفحتك PHP_SELF، يمكن للمستخدم إدخال شرطة تحتاج إلى تنفيذ برمجة عبر المواقع (XSS).
نصيحة:البرمجة عبر المواقع (Cross-site scripting، XSS) هي نوع من ثغرات الأمان للحاسوب، شائعة في تطبيقات الويب. يمكن للهacker إدخال سكريبتات العملاء في صفحات تتصفحها المستخدمين الآخرون.
افترض أن لدينا صفحة تسمى "test_form.php" تحتوي على النموذج التالي:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
الآن، إذا كان المستخدم يدخل في شريط العناوين URL العادي: "http://www.example.com/test_form.php"، سيتم تحويل الكود السابق إلى:
<form method="post" action="test_form.php">
حتى الآن، كل شيء على ما يرام.
لكن، إذا أدخل المستخدم في شريط العناوين 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.
ينبغي عليك أن تكون واعيًا يمكن إضافة أي كود JavaScript في علامة <script>! يمكن للمهاجم إعادة توجيه المستخدم إلى ملف ما على خادم آخر، والذي يحتوي على كود ضار يمكنه تغيير المتغيرات العالمية أو إرسال نموذج إلى عنوان آخر للحفاظ على بيانات المستخدم، وما إلى ذلك.
كيف يمكن تجنب استغلال $_SERVER["PHP_SELF"]؟
باستخدام دالة htmlspecialchars() يمكننا تجنب استغلال $_SERVER["PHP_SELF"].
كود النموذج مثل هذا:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
�数ونيكارا() تحول الأحرف الخاصة إلى كيانات HTML.
<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>
الآن هذا الكود آمن عند عرضه على الصفحة أو في البريد الإلكتروني.
عندما يقدم المستخدم النموذج، يجب علينا القيام بعملتين:
- (باستخدام دالة PHP trim()) إزالة الأحرف غير الضرورية من بيانات إدخال المستخدم (الفضاءات الزائدة، الألواح، الأسطر)
- (باستخدام دالة PHP stripslashes()) إزالة الأسهم العكسية (\) من بيانات إدخال المستخدم
ثم نخلق دالة التحقق (باستخدام هذا، يكون أكثر كفاءة من كتابة الكود بشكل يدوي).
نسمي الدالة test_input().
الآن، نحن قادرين على التحقق من كل متغير $_POST باستخدام دالة test_input()، والكود مثل هذا:
مثال
<?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 نموذج النموذج الإلزامي