البرمجة الآمنة في لغة Declare Variables … PHP
مدرج تحت قسم: دروس
اليوم راح نتكلم ان شاء الله عن طرق تعريف المتغيرات و اشهارها و اعطاء قيم افتراضيه، فالمتغير ان لم يكن مشهر أو معرف بقيمة قبل استعماله سوف يحدث مشاكل امنية كثيره، هذه المشاكل تساعد المخترق في عملية التخريب و الاختراق ولا احد يستطيع استغلال هذه الاخطاء غير مبرمجين 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());
واعتذر للجميع إذا كانت مواضيعي قصيرة .. لاكن اعتقد انها مفيده و ان شاء الله يكون في الاحسن من هذا.


ما شااء الله عليك درس رااائع بس فى سؤال صغير
ما الذى يمكن ان يحدث لو تم استدعاء ال php shell
وما خطورته ؟؟
وبانتظار جديدك ^_^
أولا رائع ابراهيم و الى الأمام,أخوك
ثانيا :
الأمبراطور -> phpshell ده سكربت خطير يقدر بيه الهاكر تحميل أي ملف من موقعك زي config.php مثلا و ممكن ملف الباسوورد في /etc/passwd
سلام
حمدلله انه في فائده ;) .. الـ PHP Shell خطر جدا وليس فقط على تحميل الملفات .. و ايضا يعطيك بعض الصلاحيات احيانا و تطبيق اوامر اللنكس مما يسهل عملية اختراق السيرفر كله
دروس اكثر من رائعه ولكن انا مبرمج مبتدا واريد تعلم البرمجه الاحترافيه ولكن كثرا من الاسماء والتشهيرات التى تقال ليس لى بها علم فتوسر فى فهم الدرس ارجو اعطاء دروس للمبتدين بطريقه اسهل او ابسط من ذلك وشكرا لهذه الدروس الرائعه وتوضع فى ميذان حسناتكم شكرا