SPEED 3 NET

Web master tools - programmes - scripts - html code - code css
 
الرئيسيةSpeed Portalمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتدخولالتسجيل

شاطر | 
 

 استخراج وادخال البيانات وتأمينها Security in php

اذهب الى الأسفل 
كاتب الموضوعرسالة
khdiwi
ELkInG 3s
ELkInG 3s


عدد المساهماتى : 1994
الجنس : ذكر

مُساهمةموضوع: استخراج وادخال البيانات وتأمينها Security in php   الثلاثاء أغسطس 25, 2009 7:11 pm

هذا الدرس يعتبر تغطية للقاعدة رقم 1 فى عالم البرمجة

والتى تقول "لا تثق فى المستخدم"

وسبب وضع هذه القاعدة او المقولة, هو انك ببساطة لا تعرف من الذى يتصفح موقعك

وماهى قدراته, وما الذى يستطيع فعله.

وهل اذا رأى اى ثغرة امنية بموقعك سيستغلها بأمر لا نرغب فى حدوثه, ام انه سيكون امين ويخبرنا بهذه المشكلة؟

لهذا وجدت هذه القاعدة. فـ كثيرا مانسمع عن مواقع تم اختراقها.

وكان ذلك بسبب سهو مبرمج الإسكريبت عن شئ ما.

لكن بكل الأحوال جل من لا يسهوا. ولا يوجد اسكريبت بعالم الإنترنت (او اى شئ بأى مجال اخر) خالى بنسبة 100% من الثغرات. لأننا بشر والبشر بطبيعه خطاء.

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

لنبدأ بتأمين المدخلات

لنفرض اننا لدينا قاعدة بيانات تحتوى على جدول وهذا الجدول به حقول نخزن بها بيانات الأعضاء المسجلين.

والزوار يمكنهم التسجيل عن طريق فورم تسجيل.
او تسجيل الدخول بإدخال اسم المستخدم وكلمة المرور عن طريق فورم تسجيل الدخول. وبعد ان يضغطوا على زر ارسال البيانات يقوم الإسكريبت الخاص بك بالتالى

كود PHP:

$username = $_POST['username'];
$pass = $_POST['pass'];

$sql = "SELECT * FROM `users` WHERE username='{$username}' AND pass='{$pass}'";

$result = mysql_query($sql, $link);


دقق جيدا بهذا الكود.
وتخيل معى اذا ادخل الزائر التالى فى حقل كلمة المرور
كود:

OR username='admin'
حيث admin هو اسم مستخدم المدير.
ما الذى سيحدث؟ ببساطة سيقوم هذا المستخدم الخبيث بتسجيل الدخول كامدير الموقع!
لأن كود استعلام الـ mysql سيصبح بالشكل التالى
كود PHP:

$sql = "SELECT * FROM `users` WHERE username='{$username}' AND pass='{$pass}' OR username='admin'";


وهذا مايعرف بـ sql injection
اذن كيف اأمن برنامجى من هذه الأمور؟

مبدأيا مسألة تأمين المدخلات لها طرق كثيرة.

يمكن ان نقوم بالتأكد ان المدخل لا يحتوى على ' او " او = بإستخدام الـ regular expressions او بإستخدام دالة مثل الـ strpos

لكن هذا غير مجدى. لأنه ربما يسجل احد نفسه بإسم مستخدم يحتوى على احد هذه العلامات.

لكن الحل الحقيقى فى تأمين المدخلات التى يتم وضعها داخل استعلامات الـ mysql

يكون عن طريق دالة mysql_real_escape_string او قرينتها مع الإمتداد mysqli وهى mysqli_real_escape_string

عمل هذه الدالة, ان تقوم بتأمين المتغيرات (او النصوص بمعنى اصح)

ليكون صالح لإستخدام داخل إستعلامات قواعد البيانات بدون مشاكل.

ولذلك يمكننا اعادة كتابة الكود اعلاه بالشكل التالى
كود PHP:

$username = mysql_real_escape_string($_POST['username'], $link);
$pass = mysql_real_escape_string($_POST['pass'], $link);

//insert the user details

$sql = "SELECT * FROM `users` WHERE username='{$username}' AND pass='{$pass}' OR username='admin'";

$result = mysql_query($sql, $link);


هكذا يضع المستخدم مايضعه داخل حقول تسجيل الدخول, لن يؤثر هذا فى البيانات التى يتم ادخالها بأى شكل من الأشكال.

هذا كان بالنسبة للمدخلات التى يتم ادخالها.

ماذا عن البيانات التى يتم استخراجها وطبعها, او البيانات التى توضع بواسطة الزائر ويتم طبعها؟

البيانات التى يتم طباعتها.
ربما تكون بيانات يتم استخراجها من قاعدة البيانات.
او بيانات قام المستخدم بكتابتها داخل فورم ما ثم قام بمعينتها. الخ

لكن اكثر الأشياء التى تحتاج للتأمين, هى الأشياء التى توضع بواسطة المستخدم Ahmed (مثلا) ويتم عرضها للبقية.

ربما قام هذا المستخدم بوضع كود جافا يسرق الكوكييز من اجهزة بقية الأعضاء.

او يتلاعب به بطريقة عرض الشئ الذى قام بإدخاله.

على سبيل المثال, لنفرض اننا لدينا فورم يمكن المستخدم من اضافة تعليق مثلا (كما هو الحال لدينا هنا فى الملتقى)

ماذا اذا كتب احد المستخدمين تعليق يحتوى على التالى
كود:
<meta http-equiv="refresh" content="2;url=http://example.com/" />


حيث ان example.com هو موقع اباحى مثلا.

اتعرف ماعمل هذا الكود؟ ببساطة سوف يقوم بتحويل المتصفح خلال ثانيتين الى موقع example.com وبالتالى اذا كان موقع example.com هو موقع اباحى.
هذا سوف يسئ من نظرة بقية المستخدمين الى موقعك. (وهم لا يعرفون ان هذا الأمر تم بغير ارادتك)

بالتالى تأمين مايتم طباعته للمتصفح امر هام. ويجب دائما وضعه بالإعتبار.

اذا كيف تجعل اى شئ يتم طباعته يطبع كانص وليس كود؟

هذا ابسط شئ يمكن ان تتعلمه فى الـ php

وهو بإستخدام دالة بسيطة جدا وهى htmlspecialchars

الدالة تأخذ اربعة معطيات الأول هو الإجبارى وهو النص الذى نريد تأمينه قبل طباعته.
وعملها هو ان تحول اى رمز مثل < او > الى مايسمى الـ html entity
بحيث يتم طباعته للمتصفح بدلا من التعامل معه على انه جزء من اكواد الـ html

والدالة ايضا تقوم تلقائية بتحويل علامة التنصيص المزدوج " الى كود الـ entity الخاص بها. لكنها لا تفعل ذلك مع علامة التنصيص الفردى '
لكن اذا اردناها ان تحول كل من العلامتين, يمكننا وضع المعطى الثانى ونضع به العلم ENT_QUOTES


اتمنى يكون الموضوع بسيط وبه شئ من الإفادة ولا تنسى "لا تثق ابدا بزوار موقعك"


و همذا انتهيت من دورة البي اتش بي كامله
مع تحياتى سبيد بوي
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
استخراج وادخال البيانات وتأمينها Security in php
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» تحميل اخر اصدارات برنامج كاسبر سكاي Kaspersky Internet Security 2010 V9 بالباتش لكى يعمل مدى الحياة
» ملك الحماية بلا منافس ! ..2010 BitDefender Internet Security +شرح عربي كامل ! ] ♣
» الاصدار النهائى للكاسبر Kaspersky Anti-Virus 2011 & Kaspersky Internet Security 11.0.0.232 Final ISO Boot مرفق مفاتيح التفعيل تحميل مباشر
» العملاق Kaspersky لأمان الإنترنت 2010 مفعل مدى الحياة ان شاء الله
» USB Guard الحارس الذكي

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
SPEED 3 NET :: |l|l| Technology ParT|l|l| :: برامج و طرق عمل البرامج-
انتقل الى: