دروس PHP

PHP الرئيسية مقدمة PHP تثبيت PHP بناء جملة PHP تعليقات PHP متغيرات PHP PHP صدى / طباعة أنواع بيانات PHP سلاسل PHP أرقام PHP PHP الرياضيات ثوابت PHP مشغلي PHP PHP إذا ... آخر ... Elseif مفتاح PHP حلقات PHP وظائف PHP مصفوفات PHP PHP Superglobals PHP RegEx

نماذج PHP

معالجة نموذج PHP التحقق من صحة نموذج PHP نموذج PHP مطلوب نموذج PHP URL / البريد الإلكتروني اكتمل نموذج PHP

PHP متقدم

تاريخ ووقت PHP تضمين PHP معالجة ملفات PHP فتح / قراءة ملف PHP إنشاء / كتابة ملف PHP تحميل ملف PHP ملفات تعريف الارتباط PHP جلسات PHP مرشحات PHP مرشحات PHP متقدم وظائف رد الاتصال PHP PHP JSON استثناءات PHP

PHP OOP

PHP ما هو OOP فئات / كائنات PHP منشئ PHP مدمر PHP معدِّلات الوصول إلى PHP الوراثة PHP ثوابت PHP فئات مجردة PHP واجهات PHP سمات PHP طرق PHP الثابتة خصائص PHP الثابتة مساحات أسماء PHP PHP تكرارات

قاعدة بيانات MySQL

قاعدة بيانات MySQL اتصال MySQL إنشاء قاعدة بيانات MySQL إنشاء جدول MySQL MySQL إدراج البيانات MySQL الحصول على آخر معرف إدراج عدة MySQL تم تجهيز MySQL MySQL حدد البيانات MySQL أين ترتيب MySQL حسب MySQL حذف البيانات تحديث بيانات MySQL بيانات MySQL المحدودة

لغة PHP XML

موزعي PHP XML محلل PHP SimpleXML PHP SimpleXML - احصل على PHP XML Expat PHP XML DOM

PHP - أجاكس

مقدمة أجاكس أجاكس بي إتش بي قاعدة بيانات أجاكس AJAX XML بحث أجاكس لايف استطلاع أجاكس

أمثلة PHP

أمثلة PHP مترجم PHP اختبار PHP تمارين PHP شهادة PHP

مرجع PHP

نظرة عامة على PHP صفيف PHP تقويم PHP تاريخ PHP دليل PHP خطأ PHP استثناء PHP نظام ملفات PHP مرشح PHP PHP FTP PHP JSON كلمات PHP PHP Libxml PHP Mail PHP الرياضيات متفرقات PHP PHP MySQLi شبكة PHP التحكم في إخراج PHP PHP RegEx PHP SimpleXML PHP ستريم سلسلة PHP معالجة متغيرة PHP محلل PHP XML PHP Zip المناطق الزمنية PHP

التحقق من صحة نموذج PHP


يوضح هذا والفصول التالية كيفية استخدام PHP للتحقق من صحة بيانات النموذج.


التحقق من صحة نموذج PHP

فكر في الأمان عند معالجة نماذج PHP!

ستوضح هذه الصفحات كيفية معالجة نماذج PHP مع وضع الأمان في الاعتبار. يعد التحقق الصحيح من بيانات النموذج أمرًا مهمًا لحماية النموذج الخاص بك من المتسللين ومرسلي البريد العشوائي!

نموذج HTML الذي سنعمل عليه في هذه الفصول ، يحتوي على حقول إدخال مختلفة: حقول نصية مطلوبة واختيارية ، وأزرار اختيار ، وزر إرسال:

قواعد التحقق من صحة النموذج أعلاه هي كما يلي:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

سننظر أولاً في كود 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
<input type="radio" name="gender" value="other">Other

عنصر النموذج

يبدو كود HTML للنموذج كما يلي:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

عند إرسال النموذج ، يتم إرسال بيانات النموذج باستخدام الطريقة = "post".

ما هو المتغير $ _SERVER ["PHP_SELF"]؟

يعد $ _SERVER ["PHP_SELF"] متغيرًا شاملاً فائقًا يُرجع اسم ملف البرنامج النصي المنفذ حاليًا.

لذلك ، يرسل $ _SERVER ["PHP_SELF"] بيانات النموذج المرسلة إلى الصفحة نفسها ، بدلاً من القفز إلى صفحة مختلفة. بهذه الطريقة ، سيحصل المستخدم على رسائل خطأ على نفس الصفحة مثل النموذج.

ما هي وظيفة htmlspecialchars ()؟

تعمل الدالة htmlspecialchars () على تحويل الأحرف الخاصة إلى كيانات HTML. هذا يعني أنه سيستبدل أحرف HTML مثل <و> بـ & lt؛ و & GT. يمنع هذا المهاجمين من استغلال الكود عن طريق حقن كود HTML أو Javascript (هجمات البرمجة النصية عبر المواقع) في النماذج.


ملاحظة كبيرة حول أمان نموذج PHP

يمكن للقراصنة استخدام المتغير $ _SERVER ["PHP_SELF"]!

إذا تم استخدام PHP_SELF في صفحتك ، فيمكن للمستخدم إدخال شرطة مائلة (/) ثم بعض أوامر Cross Site Scripting (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>

يضيف هذا الرمز علامة البرنامج النصي وأمر التنبيه. وعندما يتم تحميل الصفحة ، سيتم تنفيذ كود JavaScript (سيرى المستخدم مربع تنبيه). هذا مجرد مثال بسيط وغير ضار لكيفية استغلال المتغير PHP_SELF.

انتبه إلى أنه يمكن إضافة أي كود JavaScript داخل علامة <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/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

فشلت محاولة الاستغلال ولا ضرر!


التحقق من صحة بيانات النموذج باستخدام PHP

أول شيء سنفعله هو تمرير جميع المتغيرات من خلال دالة htmlspecialchars () في PHP.

عندما نستخدم الدالة htmlspecialchars () ؛ ثم إذا حاول المستخدم إرسال ما يلي في حقل نصي:

<script> location.href ('http://www.hacked.com') </script>

- لن يتم تنفيذ هذا ، لأنه سيتم حفظه كرمز تم تجاوزه بتنسيق HTML ، على النحو التالي:

& lt؛ script & gt؛ location.href ('http://www.hacked.com') & lt؛ / script & gt؛

أصبح الرمز الآن آمنًا ليتم عرضه على صفحة أو داخل بريد إلكتروني.

سنفعل شيئين آخرين عندما يرسل المستخدم النموذج:

  1. قم بإزالة الأحرف غير الضرورية (مسافة إضافية ، علامة تبويب ، سطر جديد) من بيانات إدخال المستخدم (باستخدام وظيفة PHP trim ())
  2. إزالة الخطوط المائلة العكسية (\) من بيانات إدخال المستخدم (باستخدام وظيفة PHP stripslashes ())

تتمثل الخطوة التالية في إنشاء وظيفة تقوم بكل عمليات الفحص لنا (وهو أمر أكثر ملاءمة من كتابة نفس الرمز مرارًا وتكرارًا).

سنقوم بتسمية الوظيفة 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 هو POST ، فهذا يعني أنه تم إرسال النموذج - ويجب التحقق من صحته. إذا لم يتم تقديمه ، فتخط عملية التحقق واعرض نموذجًا فارغًا.

ومع ذلك ، في المثال أعلاه ، تعتبر جميع حقول الإدخال اختيارية. يعمل البرنامج النصي بشكل جيد حتى إذا لم يقم المستخدم بإدخال أية بيانات.

الخطوة التالية هي جعل حقول الإدخال مطلوبة وإنشاء رسائل خطأ إذا لزم الأمر.