البرمجة الآمنة في لغة Declare Variables … PHP

مدرج تحت قسم: دروس
16 أغسطس 2006

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

واكثر من يقوم بتجاهل هذه النقطه هم الهواه ( مثلي و مثل غيري ) الذين درسو اساسات PHP وهواه البرمجة وليس الاساتذة، ولكن لا اقول ان الاساتذة لا يقعون في شرك هذه الاخطاء  فالكل يخطأ لكن نقول عن النســبة الاكثر.

هناك Register Globals وهذه خاصية بملف php.ini وPHP حيث تعمل على حقن البرنامج بجميع المتغيرات من HTML Forms & HTTP Request إذا كانت مفعلة، فهي خطيره احيانا ومفيدا احيانا كثيرة، فهي تسهل عمل البرنامج و تعطيه مرونه أكثر بالتعامل مع المتغيرات.

مثلاً.

// Globals = ON

if(isset($athu)){
	include('athu.php');
}

هنا إذا تحقق الـشرط يعمل البرنامج، لكن لن يتحقق الا بتعريف المتغير.

http://127.0.0.1/file.php?

في هذه الوصلة لن يعمل البرنامج، اما بحالة Register Globals = ON نقوم بالتالي.

http://127.0.0.1/file.php?athu=1

وهنا يتم حدوث الشرط و يعمل البرنامج بشكل جيد.

مـن ايــن يـاتي الخـطر؟

الخطر ياتي من كل النواحي، يجب تعلم الاساسيات و التعلم بالطريقة الصحيحه، لهذا ليس كل من يتقن اللغة يجيد البرمجة. اما عن الخطر البرمجي .. انظر إلى الكود التالي.

if($_GET['id'] == "1"){
	$page = "1";<br />
	$var1 = "a";<br />
	$var2 = "b";<br />
}elseif($_GET['id'] == "2"){
	$page = "2";<br />
	$var1 = "a";<br />
	$var2 = "b";<br />
}

if(isset($var1) && !empty($var2) && isset($page)){
	include($page".php");
}

هنا يوجد عدة شروط، لاحظ.

http://127.0.0.1/file.php?id=1

هنا حسب الكود يتم استدعاء الملف php. لاكن المشكله ان تم الوصول للملف على الشكل التالي.

http://127.0.0.1/file.php?id=-99&var1=1&var2=1&page=SHELL

عندئذ سوف تتحقق جميع الشروط. و يتم استدعاء PHP Shell، و هذا خطر طبعاً.

اما طريقة الحماية هي في تفريغ أو تعريف الـ متغيرات، لاحظ الكود التالي.

$var1 = "";
$var2 = "";
$page = "1";

if($_GET['id'] == "1"){
	$page = "1";
}elseif($_GET['id'] == "2"){
	$page = "2";
}

if(isset($var1) && !empty($var2) && isset($page)){
	include($page".php");
}

وفي المثال السابق مثل ما بتلاخظو قمنا في تفريغ بعض المتغيرات و اعطاء متغير قيمة لكي لا يتم التلاعب بهم لو كانت Globals ON.

الـسلاسل الحرفية .. و الـ .=

الجميع يعرف طريقة ربط الـسلاسل الحرفية ( Strings ) عن طريق الـ .= و هذه طريقة عملية جدا لكن مخاطرها كثيره.

وهذه المخاطر ايضا تساعدك في التلاعب بقيم المتغير عن طريق Register Globals أو بطرق آخرى.

انظر إلى المثال التالي.

$Query .= "SELECT FROM Users";
mysql_query($Query) or die(mysql_error());

لاحظ المتغير $Query و طريقة اعطاء القيمه له، لكن مع Register Globals ON والمتغير غير مفرغ أو بدون قيمة قبل استدعائه بهذه الطريقة يكون خطر جدا، فمن خلال HTTP Request من الممكن التلاعب بالمتغير.

http://127.0.0.1/file.php?Query=SQL/*

وتصبح قيمة المتغير كلتالي.

SQL/*SELECT FROM Users

وهذا خطر جدا، من الممكن الاستغلال SQL Injection أو File Inclusion أو حتى Command Exec & XSS.

و الطريقة الصحيحه لكتابة الكود هي.

$Query = "SELECT FROM Users";
mysql_query($Query) or die(mysql_error());

او

$Query = "";
$Query .= "SELECT FROM Users";
mysql_query($Query) or die(mysql_error());

واعتذر للجميع إذا كانت مواضيعي قصيرة .. لاكن اعتقد انها مفيده و ان شاء الله يكون في الاحسن من هذا.

للكاتب ابراهيم بصه

  • Share/Bookmark

التعقيبات

  1. PHP6

التعليقات (4) على ”البرمجة الآمنة في لغة Declare Variables … PHP“

  1. ما شااء الله عليك درس رااائع بس فى سؤال صغير

    ما الذى يمكن ان يحدث لو تم استدعاء ال php shell

    وما خطورته ؟؟

    وبانتظار جديدك ^_^

  2. MaKeNtOoSh

    أولا رائع ابراهيم و الى الأمام,أخوك
    ثانيا :
    الأمبراطور -> phpshell ده سكربت خطير يقدر بيه الهاكر تحميل أي ملف من موقعك زي config.php مثلا و ممكن ملف الباسوورد في /etc/passwd
    سلام

  3. حمدلله انه في فائده ;) .. الـ PHP Shell خطر جدا وليس فقط على تحميل الملفات .. و ايضا يعطيك بعض الصلاحيات احيانا و تطبيق اوامر اللنكس مما يسهل عملية اختراق السيرفر كله

  4. جوبا

    دروس اكثر من رائعه ولكن انا مبرمج مبتدا واريد تعلم البرمجه الاحترافيه ولكن كثرا من الاسماء والتشهيرات التى تقال ليس لى بها علم فتوسر فى فهم الدرس ارجو اعطاء دروس للمبتدين بطريقه اسهل او ابسط من ذلك وشكرا لهذه الدروس الرائعه وتوضع فى ميذان حسناتكم شكرا

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة