Updates from فبراير, 2009 Toggle Comment Threads | اختصارات لوحة المفاتيح

  • phpreference 8:55 PM on 22 February 2009 رابط دائم | رد  

    حمايه لوحه التحكم 

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

    هنتعرف اليوم علي كيفيه حمايه لوحه التحكم بدون إستخدام أي داله لحمايه المدخلات من SQL injection لكن الأول نعرف المشكله

    لو عندنا لوحه تحكم بسيطه ولانريد لأي أحد الدخول لها إلا مدير الموقع مثلاً هانعمل جدول بسيط أسمه admin مثلاً في ثلاث حقول هم id و name و password وهانعمل فورم بسيط HTML لإدخال المعلومات اللي هي الأسم وكلمه المرور

    طبعاً موضوعنا ليس الفورم ولكن صفحه معالجه البيانات الأتيه منه 

    غالباً ماتكون بالشكل التالي

    <?php
    $name = $_GET&#91;'name'&#93;;
    $password = $_GET&#91;'password'&#93;;
    
    $sql = "SELECT * FROM admin WHERE name='" .$name. " and password='" . $password."'";
    if (mysql_num_rows(mysql_query($sql)) > 0) {
    	 // Redirect to controll panel
    }
    
    die('خطأ في تسجيل الدخول');
    ?>
    

    طبعاً تستطيع إسخدام أي داله لعد النتائج أو أستخراج النتائج لكن أين المشكله ؟ المشكله هو لو قام أحد الصبيه بإدخال المعلومات التاليه في الفورم
    الأسم : heacker
    كلمه المرور : pass’ or 1=1
    فيصبح شكل الأستعلام كالتالي

    SELECT * FROM admin WHERE name='hacker' and password='pass' or 1=1
    

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

    <?php
    $name = $_GET&#91;'name'&#93;;
    $password = $_GET&#91;'password'&#93;;
    
    $sql = 'SELECT * FROM admin WHERE name='.$name;
    $result = mysql_query($sql);
    if (mysql_num_rows($result)) > 0) {
    	while($row = mysql_fetch_assoc($result)) {
    		if ($row['password'] === $password) {
    			 // Redirect to controll panel
    		}
    	}
    
    }
    ?>
    

    ماذا لو أدخل الصبي نفس البيانات السابقه أو أي أكواد أخري ؟ ببساطه لن يستطيع الدخول لماذا ؟ لأن المقارنه أصبحت تتم علي مستوي لغه البرمجه وليس علي مستوي قاعده البيانات
    لكن ماذا لو أراد أدخال إستعلامات أخري لقاعده البيانات ؟ علي الرغم من أن mysql_query لا تدعم الأستعلامات المتعدده نريد أن نمنعه  من مجرد إحتمال إدخال أي شئ لقاعده البيانات
    غير الكود للشكل التالي :

    <?php
    $name = $_GET&#91;'name'&#93;;
    $password = $_GET&#91;'password'&#93;;
    
    $sql = 'SELECT * FROM admin';
    $result = mysql_query($sql);
    if (mysql_num_rows($result)) > 0) {
    	while($row = mysql_fetch_assoc($result)) {
    		if ($row['password'] === $password && $row['name'] === $name) {
    			 // Redirect to controll panel
    		}
    	}
    }
    
    die('خطأ في تسجيل الدخول');
    ?>
    

    إذن سوف لن يحلم بمجرد وجود فرصه لإدخال أيه أكواد للوحه التحكم

    طبعاً في هذا الدرس لا أنصحك بعدم إستخدام دوال لتنظيف المدخلات ولكن الفكره أن المهم هو المبرمج وليس اللغه

    Advertisements
     
    • islam khalil 3:59 مساءً on 28 فبراير 2009 رابط دائم

      even this work but its not a high performance one
      as you have to select all data from the table admin each time

      i think removing inj from string and give a max length to you sql string could be better for perforamce

  • phpreference 12:20 AM on 1 February 2009 رابط دائم | رد  

    إنشاء الفئه class 

    قمنا في مقدمه هذه الدوره بالتعرف علي مفاهيم البرمجه كائنيه التوجه ، سوف نقوم الأن بكتابه الكود الخاص بإنشاء الفئه class .
    قبل قراءه هذا الدرس يجب قراءه درس الصلاحيات Visibility لأننا سوف نحتاجه في هذا الدرس.
    سوف نقوم في هذا الدرس بكتابه كلاس تعليمي وسنسميه textBox وظيفته كتابه أي جمله نحددها في مربع بسيط .

    لإنشاء أي فئه يلزمنا ثلاث خطوات رئيسيه وهي :

    1 – كتابه الأكواد الازمه لتعريف الفئه
    طبعاً في هذه الخطوه يلزم تسميه الفئه بأي أسم تريد ويكون الكود بالشكل التالي :

    <?php
    class أسم الفئه
    {
    	//تحديد خواص الفئه
    	//تحديد أساليب الفئه
    }
    ?>
    

    وإذا كانت الفئه فرعيه ترث خصائص وأساليب الفئه الأصليه يكون الكود بالشكل التالي :

    <?php
    class الفئه الفرعيه extends الفئه الأصليه
    {
    	//تحديد خواص الفئه
    	//تحديد أساليب الفئه
    }
    ?>
    

    ملحوظه : 
    كلمه extends  كلمه معرفه في لغه PHP ومعناها أن الفئه الفرعيه ترث خصائص وأساليب الفئه الأصليه وسوف نتناول هذا الجزء بالتفصيل في تدوينه قادمه عن الوراثه .

    2 – تحديد خواص – متغيرات – الفئه
    ونقوم في هذه الخطوه بإنشاء خواص الفئه وتحديد صلاحيات كل خاصيه كما بالشكل التالي:

    <?php
    class أسم الفئه
    {
    	أسم الخاصيه    الصلاحيه;
    }
    ?>
    

    الأن سوف نحدد خواص كلاسنا العزيز textBox :

    <?php
    class textBox
    {
         public $message;
         protected $width = 150;
    }
    ?>
    

    لقد قمنا بتحدد خاصيتين أحدهما message$ لحمل الرساله التي نريد عرضها ، والأخري width$ لتحديد عرض المربع النصي .

    ملحوظه : 
    يمكن تحديد قيمه الخاصيه – المتغير – عند تعريفها أو نترك قيمتها فارغه .

    3 – تحديد أساليب – دوال – الفئه
    وفي هذه الخطوه سوف نقوم بكتابه أساليب  الفئه  وهي كالدوال في البرمجه الهيكليه ولكن تكون مسبوقه بصلاحيه الأسلوب كما بالشكل التالي :

    <?php
    class أسم الفئه
    {
    	الصلاحيه function أسم الأسلوب()
    	{
    		// أكواد الأسلوب
    	}
    }
    ?>
    

    الأن نقوم بتحديد أساليب الفئه textBox وهذه الأساليب تقتصر علي الداله display لعرض المربع النصي ،  وبالتالي أصبحت الفئه متكامله كما بالشكل التالي :

    <?php
    class textBox
    {
    	public $message;
    	protected $width = 150;  
    
    	public function display()
    	{
    		echo
    		'
    <div width="' . $this->width . '">'
    		. $this->message . '</div>
    ';
    	}
    }
    ?>

    الأن أصبح الكلاس متكامل ولكن ماذا عني كلمه this وكيف نستطيع إستخدام الكلاس ؟ هذا سوف نتناوله في التدوينه القادمه بإذن الله .

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

    الدروس السابقه في هذه الدوره :
    مقدمه دوره البرمجه كائنيه التوجه
    الصلاحيات Visibility

    Bookmark and Share

     
    • Ben.Fat7i 5:39 صباحًا on 21 مارس 2009 رابط دائم

      السلام عليكم

      أخى العزيز محمد أولا اشكرك الشرح أكثر من ممتاز اللهم ما اجعل هذا فى ميزان حسناتك

      أود فقط أن ألقى نظره على مشكلة واجهتنى شخصيا خلال الشرح و هى الاسماء العربية كانت مشكلة بالنسبة لى

      لى اقتراح بسيط أكتب الاسم بالعربي و بين قوسين الاسم باللغه الانجليزية

      مثال : الفئه ( class )

      و متشكر مقدما و بالتوفيق دائما

    • maher 11:27 صباحًا on 13 مايو 2009 رابط دائم

      السلام عليكم الاخ محمد اشكرك جزيلا الشكر على الجهد المبذول ونتمنى المزيد

    • phpreference 6:25 مساءً on 16 يونيو 2009 رابط دائم

      @Ben.Fat7
      بإذن الله سوف أخذ ملاحظتك في الحسبان عند كتابه تدوينات أخري

      @maher
      شكراً لك أخي الكريم

c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
رد
e
تحرير
o
Show/Hide comments
t
العودة لأعلى
l
Go to login
h
Show/Hide help
shift + esc
إلغاء