السلام عليكم ورحمه الله وبركاته
هذا الموضوع سيضم الكثير من الاشياء المفيده الخاصه بالبرمجه بلغه ال PHP والـ MYSQL
ملحوظه
فى الامثله التى سأقوم بشرحها سأقوم بأستخدام بعض الدوال الجديده مثل
($_GET/$_POST/$_COOKIE/$_SERVER)
وذلك لاننى اعتقد انه اذا لم يكن جميعكم فغالبيتكم يوجد لديه الأصداره 4.1.0 من الــ PHP
واذا لم تكن لديكم هذه الأصاره يمكنكم استخدام الدوال القديمه
($HTTP_GET_VARS/$HTTP_POST_VARS/$HTTP_COOKIE_VARS/$HTTP_SERVER_VARS)
ولكن ينبغي عليكم الترقيه وذلك لاكتشاف عده ثغرات بالنسخ القديمه منها على سبيل المثال لا الحصر file-upload vulnerability
register_globals
فى البدايه لمن لا يعلم فائده ال register_globals فهو خيار فى ملف اعدادات الــ php واسم ملف الاعدادات php.ini
وهذا الخيار اذا كان مفعل اى
register_globals=on
فانه يمكنك من الوصول لمعظم متغيرات الاسكريبت الخاص بك بطريقه سحريه عن طريق مناداه المتغير بأسمه فقط
وينتج هذا لانه عند تفعيل هذا الخيار يتم تحويل المتغيرات العاديه الى متغيرات عامه (global variables)
وللأسف هذه الطريقه يتم استخدامها فى الكثير والكثير من البرامج والأمثله ..
وقد لاحظ فريق المطورين الخاص بالـ PHP ذلك واتضح لهم ان خيار الــ register_globals كانت فكره سيئه للغايه ,
وتم مناقشه هذا الامر ونصحو بغلقها تماما
register_globals=OFF
Note that register_globals is going to be deprecated (i.e., turned off by default) in the next version of PHP, because it often leads to security bugs.
...
You should do your best to write your scripts so that they do not require register_globals to be on
وذلك لانها تتسبب فى وجود الكثير من الثغرات الامنيه ..
وفى الحقيقه منذ بدايه عصر الاصداره رقم 4.2.0 تم اغلاق الــ register_globals بصوره افتراضيه الان ,
ولذلك يجب مراعاه كتابه كود برمجى يعمل على الأنظمه كلها سواء كانت الــ
register_globals=ON
او
register_globals=OFF
ولذلك وجب علينا استخدام بعض الدوال المختصه بأستقبال المتغيرات مثلا لأستقبال متغير يسمى
$VAR
الطريقه القديمه كانت بواسطه كتابه اسمه فقط
Echo $var;
هذه فى حاله ان الــ
register_globals=ON
والطريقه الثانيه والمثلي
Echo $_GET['VAR']; //او Echo $_POST['VAR'];
هذا فى حاله استقبال متغيرات عن طريق الــ Get او الـــ POST
ولطباعه نوع المتصفح نستخدم
eCHO $_SERVER['HTTP_USER_AGENT'];
بدلا من
ECHO $HTTP_USER_AGENT;
وهناك العديد من الدوال التى يجب ان نلم بها وهى
$_GET, $_POST, $_COOKIE, $_SERVER
ويمكنكم قراءه المزيد هنا
http://www.php.net/manual/en/language.vari....predefined.php
او هنا
http://www.php.net/manual/en/reserved.variables.php
magic_quotes , addslashes() , stripslashes() ...
magic_quotes_gpc هو احد الخيارات الموجوده فى ملف اعدادات الــ PHP وعندما يكون هذا الخيار مفعلا اى
magic_quotes_gpc =ON
فأنها تضيف شرطات مائله (\) الى جميع المتغيرات
GET/POST/COOKIE
لذلك لا يوجد داعى لاستخدام addslashes() اذا كان هذا الخيار مفعلا
لذلك فعند اجراء الاستعلامات لاننا بهذا سنعقد المسأله , ولتوضيح ما ارمي اليه , فاذا كان هذا الخيار مفعلا ستصبح كلمه I'M = I\\'M
وايضا اذا استخدمنا داله addslashes() فى حاله كان الخيار غير مفعل ستصبح كلمه I'M = I\\'M
لاحظنا الان ان الاثنين يقومون بنفس العمل
فما بالك اذا قمنا بأستخدام الداله addslashes() وكان خيار
magic_quotes_gpc =ON
ستصبح كلمه I'M = I\\\\'M
ارأيتم التعقيد ؟ ماذا لو اردنا استخراج هذا الناتج من قاعده البيانات واخراجه للمستخدم الناتج التلقائي سيكون
I\\'M
وهو غير مطابق للمدخلات بأى حال من الاحوال ولذلك وجب علينا استخدام داله stripslashes() وسيكون النتيجه
I'M
ولكن لماذا نستخدم هذا الكم من الدوال مادام فى امكاننا ان نستخدم داله واحده فقط وهى addslashes() ؟؟؟
تذكرو دائما ان المبرمج المحترف هو من يصل للنتيجه بأقل عدد من الاسطر البرمجيه
لذلك اننى انصح بغلق الـــ magic_quotes_gpc
واستخدام داله addslashes() فقط عند ادخال بيانات لقاعده بيانات فقط
يمكنك غلق الــ magic_quotes_gpc وجعله = OFF عن طريق اضافه الكود التالى لملف .htaccess
<IfModule mod_php4.c> php_flag magic_quotes_gpc off </IfModule>
واذا لم يمكنك يمكنك استخدام هذه الداله فى كافه ملفاتك عن طريق وضعها فى ملف خاص وتضمينها فى بدايه كل ملف ..
وفائده هذه الداله هو تخطى الــ شرطات المائله التى تنتج نتيجه فتح خيار magic_quotes_gpc
function strip_magic_quotes($arr)
{
foreach ($arr as $k => $v)
{
if (is_array($v))
{ $arr[$k] = strip_magic_quotes($v); }
else
{ $arr[$k] = stripslashes($v); }
}
return $arr;
}
if (get_magic_quotes_gpc())
{
if (!empty($_GET)) { $_GET = strip_magic_quotes($_GET); }
if (!empty($_POST)) { $_POST = strip_magic_quotes($_POST); }
if (!empty($_COOKIE)) { $_COOKIE = strip_magic_quotes($_COOKIE); }
}ملحوظه
رابط الموضوع الاصلي هو
http://www.brmaga.com/vb/thread9.html
اتمنى ذكر حقوق الموقع عند نقل الموضوع
وللحديث بقيه :)