هذا والفصول التالية تظهر كيفية استخدام PHP للتحقق من صحة بيانات النموذج.
PHP التحقق من صحة النموذج
أعتقد SECURITY عند معالجة أشكال PHP!
وهذه الصفحات تظهر كيفية معالجة أشكال PHP مع الأمن في الاعتبار. التحقق من صحة السليم للبيانات النموذج مهم لحماية النموذج الخاص بك من المتسللين والمتطفلين!
شكل HTML سوف نعمل على في هذه الفصول، ويحتوي على حقول الإدخال المختلفة: مطلوب والحقول الاختيارية النص، أزرار الراديو، وزر الإرسال:
قواعد التحقق من صحة للنموذج أعلاه هي على النحو التالي:
حقل | قواعد التحقق من صحة |
---|---|
اسم | مطلوب. + يجب أن تحتوي فقط على الحروف والمسافات |
البريد الإلكتروني | مطلوب. + يجب أن تحتوي على عنوان بريد إلكتروني صالح (with @ and .) |
موقع الكتروني | اختياري. إذا كان موجودا، فإنه يجب أن تحتوي على URL صحيح |
تعليق | اختياري. حقل إدخال خط متعددة (textarea) |
جنس | مطلوب. يجب اختيار واحد |
أولا نحن سوف ننظر في رمز HTML عادي للنموذج:
الحقول النصية
الاسم، البريد الإلكتروني، وحقول الموقع هي العناصر إدخال النص، وحقل التعليق هو جزء النص. رمز HTML يبدو مثل هذا:
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website:
<input type="text" name="website">
Comment:
<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"]);?>">
عند إرسال النموذج، يتم إرسال بيانات النموذج مع طريقة = "آخر".
ما هو $ _SERVER [ "PHP_SELF"] متغير؟
و$ _SERVER [ "PHP_SELF"] هو متغير السوبر العالمية التي تقوم بإرجاع اسم الملف من السيناريو تنفذ حاليا.
لذا، فإن $ _SERVER [ "PHP_SELF"] يرسل بيانات النموذج المقدم إلى الصفحة نفسها، بدلا من القفز إلى صفحة مختلفة. بهذه الطريقة، سيكون المستخدم الحصول على رسائل خطأ على نفس الصفحة مثل النموذج.
ما هو htmlspecialchars() وظيفة؟
و htmlspecialchars() وظيفة تحويل أحرف خاصة إلى كيانات HTML. وهذا يعني أنه سيحل محل الأحرف HTML مثل <و> مع العلامة & lt؛ و & GT؛. وهذا ما يمنع المهاجمين من استغلال رمز HTML عن طريق حقن أو رمز جافا سكريبت (Cross-site Scripting attacks) في النماذج.
ملاحظة كبيرة على PHP الأمن نموذج
و$ _SERVER [ "PHP_SELF"] متغير يمكن استخدامها من قبل المتسللين!
إذا تم استخدام PHP_SELF في صفحتك ثم يمكن للمستخدم إدخال خط مائل (/) وبعد ذلك بعض الكتابة عبر الموقع (XSS) أوامر لتنفيذه.
البرمجة عبر المواقع (XSS) هو نوع من ثغرة أمنية الكمبيوتر التي توجد عادة في تطبيقات الويب. XSS تمكن المهاجمين لحقن نصي من جانب العميل في صفحات الويب عرضها من قبل المستخدمين الآخرين.
نفترض لدينا النموذج التالي في صفحة باسم "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>
هذا الرمز يضيف العلامة السيناريو وأمر في حالة تأهب. وعندما سيتم تنفيذ شفرة جافا سكريبت تحميل الصفحة (the user will see an alert box) . هذا مجرد مثال بسيط وغير ضارة كيف يمكن استغلالها المتغير PHP_SELF.
يكون على بينة من أن يمكن إضافة أي شفرة جافا سكريبت داخل <script> العلامة! ويمكن للهاكر إعادة توجيه المستخدم إلى ملف على خادم آخر، وهذا الملف يمكن ان تحمل الشيفرات الخبيثة التي يمكن أن تغير المتغيرات العالمية أو إرسال النموذج إلى عنوان آخر لحفظ بيانات المستخدم، على سبيل المثال.
كيفية تجنب $ _SERVER [ "PHP_SELF"] مآثر؟
$ _SERVER [ "PHP_SELF"] مآثر يمكن تجنبها باستخدام htmlspecialchars() وظيفة.
رمز الشكل الذي ينبغي أن تبدو هذه:
<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> الموقع. href('http://www.hacked.com') </ script>
- وهذا لن يتم تنفيذه، لأنه يتم حفظها كما هرب HTML التعليمات البرمجية، مثل هذا:
العلامة & lt؛ النصي وGT؛ موقع. href('http://www.hacked.com') العلامة & lt؛ / النصي وGT.
رمز الآن آمنة للظهور على الصفحة أو داخل البريد الإلكتروني.
ونحن أيضا اثنين من أكثر الأشياء عندما يقوم المستخدم بإرسال النموذج:
- الأحرف قطاع غير الضرورية (extra space, tab, newline) من البيانات إدخال المستخدم (with the PHP trim() وظيفة)
- إزالة الخطوط المائلة العكسية (\) من البيانات إدخال المستخدم (with the PHP stripslashes() وظيفة)
الخطوة التالية هي إنشاء وظيفة من شأنها أن تفعل كل فحص بالنسبة لنا (which is much more convenient than writing the same code over and over again) .
سنعلن اسم وظيفة test_input() .
الآن، ونحن لا يمكن أن تحقق كل متغير $ _POST مع test_input() وظيفة، والسيناريو يبدو مثل هذا:
مثال
<?php
// define variables and set to empty values
$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 هو وظيفة، ثم تم إرسال النموذج - وينبغي التحقق من صحتها. إذا لم يتم تقديمه، تخطي التحقق من صحة وعرض نموذج فارغ.
ومع ذلك، في المثال أعلاه، جميع حقول الإدخال اختيارية. السيناريو يعمل بشكل جيد حتى لو كان المستخدم لا يدخل أي بيانات.
والخطوة التالية هي لجعل حقول الإدخال المطلوبة وإنشاء رسائل خطأ إذا لزم الأمر.