المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : درس مفصل هام جدا فى الPHPحماية مناطق بنظام الجلسات session



Chakira
11-01-2013, بتوقيت غرينيتش 09:30 AM
http://www.dzbatna.com/images/icons/iconrote.gif ط¯ط±ط³ ظ‡ط§ظ… ط¬ط¯ط§ ظپظ‰ ط§ظ„PHPط*ظ…ط§ظٹط© ظ…ظ†ط§ط·ظ‚ ط¨ظ†ط¸ط§ظ… ط§ظ„ط¬ظ„ط³ط§طھ session (http://www.dzbatna.com/t524206/)




حماية مناطق بنظام الجلسات session



بسم الله الرحمن الرحيم


أخواني وأخواتي أعضاء وزوار ديزاد باتنة تحية طيبة وبعد .

أقدم لكم اليوم معلومة قد تكون جديدة إلى حد ما والذي جعلني اقول عنها جديدة هي انعدام التحدث عنها إلى حد ما مما يجعلها نقطة غامضة عند الكثير من المبرمجين الجدد الذين يرغبون برفع مستواهم او التقدم او إيجاد حلول وطرق جديدة وسأتحدث في هذه الجلسة عن أحد إستخدامات الـ Session (الجلسات) الكثيرة وسيكون العمل عبارة عن طريقة لحماية أكثر من صفحة باسم مستخدم وكلمة مرور وبواسطة سطرين بكل مل بالإضافة الى ملف الأوامر ، بسم الله نبدأ .

أولا : ما الفائدة من إستخدام هذا الأسلوب ؟

الفائدة كبيرة جدا تخيل أنك تريد حماية لوحة تحكم موقعك او منطقة خاصة بالأعضاء وتتكون هذه المناطق من أكثر من ملف وتريد حمايتهم فما هو اسلوبك انا متأكد انه لن يكون بوضع طلب لإسم مستخدم وكلمة مرور في كل ملف من هذه الملفات !

ثانيا : هل هو آمن وكافي ؟

نعم حيث انه يسجل قيم في الجهاز ولا يمكن تجاوزه إطلاقا وهو عملي وبسيط جدا .

ثالثا : الطريقة والتنفيذ

في هذه الجلسة لن نستخدم الأساليب التقليدية بل سنخرج عن الروتين قليلاً ، أول خطوات هذا العمل هي عمل نموذج لدخول للمنطة المراد تنفيذ الأمر عليها وينصح بشدة أن تكون عبارة عن دالة Function وذلك يلعب دول كبير وساشرح طريقة هذه النقطة ،

عندما تجعل نموذج تسجيل الدخول عبارة عن دالة فتستطيع التحكم بالجزء العلوي من الجدول بإعطائه قيمة متحول مثلا header وهذا نموذج تسجيل دخول كمثال ولكن انصح بإنشائه من الصفر
رمز PHP:

<code style="white-space:nowrap"> <code> &#91;
</code> </code>

رمز PHP:

<code style="white-space:nowrap"> <code> PHP&#93;
function initlogin($header) {
print("<br><br>") ;
print("<table align=center width=50% bgcolor=#C7933F border=1 bordercolor=#CCCCCC>") ;



print("<tr><td align=center class=detailstyle>$header</td></tr>") ;
print("<tr><td align=center>") ;
print("<form action=index.php method=post>") ;
print(" <table align=center width=100% bgcolor=#C7933F border=1 bordercolor=#CCCCCC>") ;

print(" <tr><td align=right class=detailstyle>&#195;&#207;&#206;&#225; &#199;&#211;&#227; &#199;&#225;&#227;&#211;&#202;&#206;&#207;&#227;</td>") ;
print(" <td align=right><input dir=\"ltr\" class=enterstyle type=text name=username size=15></td>") ;
print(" </tr>") ;

print(" <tr><td align=right class=detailstyle>&#195;&#207;&#206;&#225; &#223;&#225;&#227;&#201; &#199;&#225;&#227;&#209;&#230;&#209;</td>") ;
print(" <td align=right><input dir=\"ltr\" class=enterstyle type=password name=password size=15></td>") ;
print(" </tr>") ;

print("<tr><td colspan=2 align=center><input class=enterstyle type=submit value=\"&#207;&#206;&#230;&#225;\"></td></tr>") ;

print(" </table>") ;
print(" </form>") ;
print(" </td></tr>") ;
print(" </table>") ;
}
</code> </code>


لاحظ عبارة header اين موقعها في الاعلى أي انها محددة كقيمة للدالة يمكننا التحكم بها من ملفات أخرى مرتبطة بهذا الملف بعد عمل هذا التطبيق قم بحفظه باسم وليكن login.php

ملاحظة هامة جدا جدا : إذا انتبهت إلى form action ستجد انه متوجه إلى صفحة الـ index أي الصفحة الرئيسة ومن هناك يأخذ الاوامر علما انه لا يوجد اي شيء هناك له علاقة بالموضوع كما سنرى لاحقا ، هكذا نكون انهينا الجزء الأول ...

ننتقل للجزء الثاني والاهم وهو المكان الذي يدير كافة هذه المعلومات انشئ ملف جديد وليكن اسمه ln.php في اول هذا المل سنطلب البدء في تسجيل الجلسة session عن طريق عبارة أو الامر

رمز PHP:

<code style="white-space:nowrap"> <code> ()session_start
</code> </code>

الان سنطلب من هذا الملف أن يتأكد من وجود الدالة Function المسؤولة عن موضوع تسجيل الدخول كنموذج الذي قمنا بعمله في الأعلى قبل قليل وانا اسميت هذه الدالة initlogin وهذا الامر هو المسؤول عن التنفيذ
رمز PHP:

<code style="white-space:nowrap"> <code> if( !function_exists("initlogin") ){
include("login.php") ;
}
</code> </code>

[/PHP]
هنا يسأل البرنامج عن هذه الدالة إن كانت موجودة ويستدعي الملف المسؤول عن تسجيل الدخول الذي أنشئناه قبل قليل وكان اسمه login.php ومن ثما يبدأ في عملية المعالجة ويبدأ بالفحص إذا كانت الجلسة مسجلة فيسمح بالدخول وإذا لا فيطلب اسم المستخدم وكلمة المرور (طريقة التحضير) ...

اولا نقوم بوضع جملة joomla if الشرطية ونحدد قيمها بطلب الجلسة المسجلة عن طريق السطور التالية
رمز PHP:

<code style="white-space:nowrap"> <code> if( session_is_registered("loggedinm") && ($action == 'logout') ){
session_unregister("loggedinm") ;
session_destroy() ;
}
</code> </code>

هنا يتأكد من ان الجلسة مسجلة وفي حال كانت مسجلة يعطيها القيمة loggedinm أما المتغير action هنا تم وضعه ليكن إمكانية لك حتى تضع لينك في برنامجك لتسجيل الخروج وحتى يترجم محاولة الدخول الخاطئ او عدم الدخول من قبل على اساس انها محاولة تسجيل خروج ، وباقي السطور أيضا هي انه في حال كانت الجلسة غير مسجلة ان يعيد نفس القيمة لأننا سنعتمد عليها في جميع أنحاء عملنا هذا وبعدها ينفذ عملية مسح الجلسة او تدميرها كليا ،

الان عملية تسجيل الدخول : ساضع السطور ثم ساشرح طريقةها
رمز PHP:

<code style="white-space:nowrap"> <code> if( ! session_is_registered('loggedinm') ){
if(! $HTTP_POST_VARS ){
initlogin("تسجيل دخول المدير") ;
}
</code> </code>

الان سيتأكد من ان الجلسة غير مسجلة والذي يحدد كلمة (غير ) علامة التعجب التي تسبق الشرط وفي حال كانت غير مسجلة سيعيد لنا قيمة الـ loggedinm على انها غير مسجلة كما طلبنا في تسلسل الاوامر في الاعلى ومن ثم سيتأكد من عدم تسجيل او دخول اي متغيرات عن طريق المتغير http_post_vars وبعدها سيضع قيمة &quot;تسجيل دخول المدير &quot; للدالة التي قمنا بعملها في البداية والتي هي initlogin وعندما تعود هذه القيمة للملف login.php ستطبع في الاعلى في المكان الذي تحدد له المتغير header كل ما تقدم ذكره كان في حالة عدم تسجيل الدخول بعد الأن داخل الجملة joomla الشرطية الاحقة else نقوم بتحديد متغيرات الدخول وتعليماته وإليك السطور ثم الشرح طريقة
رمز PHP:

<code style="white-space:nowrap"> <code> else{
if( isset($HTTP_POST_VARS&#91;'username'&#93;) && isset($HTTP_POST_VARS&#91;'password'&#93;) ){
if( ($username == 'user') && ($password == 'pass') ){
$loggedinm = $HTTP_POST_VARS&#91;'username'&#93; ;
session_register('loggedinm') ;
}
</code> </code>

هنا بعد البدأ في الشرط else قمنا بتحديد خانت username وهذا الإسم هو نفسه اسم الفراغ المسؤول عن اسم المستخدم في فورم تسجيل الدخول واعدناه للقيمة http_post_vars وطلبنا التحقق أيضا من خانت password التي ينطبق عليها نفس عمليات الـ username ، الان في السطر الثاني نحدد قيم لإسم المستخدم وكلمة المرور وهذا هو الجزء السهل من الموضوع اي ان المسالة بكل بساطة ضع اسم المستخدم بدل كلمة user وكلمة المرور بدل كلمة pass وتنتهي المسالة ، الأن في هذه الخطوة إذا كانت المعطيات صحيحة سيتم تسجيل جلسة حسب اسم المستخدم وسيعيد لنا قيمة الـ loggedinm .

الان في حالة كانت المعطيات غير صحيحة سيكون لدينا سطر واحد ضمن الشرط else لوضع الجملة joomla وهو :
رمز PHP:

<code style="white-space:nowrap"> <code> else{
initlogin("تسجيل دخول خاطئ الرجاء المحاولة من جديد") ;
}
</code> </code>

الأن الخطوة الماقبل الأخيرة وهي البداية تماماً أنظر السطور
رمز PHP:

<code style="white-space:nowrap"> <code> else{
session_unset() ;
session_destroy() ;
initlogin("تسجيل دخول المدير") ;
</code> </code>

هنا الأمر هو إذا كانت الجلسة غير مسجلة أو ممسوحة او مدمرة يعرض النتيجة صفر وهي &quot;تسجيل دخول المدير&quot;

الان الخطوة ألخيرة فعلا

في هذه العملية وبعد حفظ هذه المجموعة الصغيرة من الأوامر تبدأ عملية زرع سطور في الصفحات المراد حمايتها والسطور بكل بساطة هي كالتالي :

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

وإستخدام السطرين التاليين قبل أي عملية او نموذج أو فورم اي في بداية الصفحة
رمز PHP:

<code style="white-space:nowrap"> <code> include("ln.php") ;
if( session_is_registered("loggedinm") ){
</code> </code>

هنا نطلب الإتصال بالملف الذي أنشئناه قبل قليل لنتأكد ان قيمة الـ loggedinm مسجلة في الجلسة وفي حال كانت الجلسة مسجلة فهذا يعني أنها مسجلة باسم المدير أو حامل التصريح فقط فيسمح لك بمتاعبة قرائة الملف او تنفيذ محتوياته هذا التعديل الوحيد الواجب تنفيذه في جميع الملفات وبهذا تم بحمد الله ...

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

ملاحظة هامة : أخواني الاعزاء متابعة الدروس أو المواضيع أو الكتب المتعلقة بالبرمجة غير كافية إطلاقا لتصنع منك مبرمجا محترفا الحل أنه يجب أن تدخل إبداعك الشخصي وتستخدم مخيلتك لتصور ألية عمل شيئ معين ثم تطبيقه على الواقع اتمنى اني قدمة الفائدة وطرح جديد واعتذر على الإطالة وأي إستفسار انا جاهز
اخوكم
احمد المنفلوطى






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى