الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ملحوظات مفيده لبرمجه قويه بال PHP

مغلق
بدأه Brmaga في 13 يوليو 2005 · 4 رد · 1,580 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

هذا الموضوع سيضم الكثير من الاشياء المفيده الخاصه بالبرمجه بلغه ال 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

اتمنى ذكر حقوق الموقع عند نقل الموضوع

وللحديث بقيه :)

#3

مشكور اخوي

#4

thanks alot

#5

مشكور

جزاك الله خير

هذا الموضوع مغلق.

مواضيع مشابهة