النتائج 1 إلى 13 من 13

الموضوع: [ نقاش ] دالة فلترة الملفات : للتأكد من الملفات الضارة في المرفقات

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2003
    المشاركات
    461

    [ نقاش ] دالة فلترة الملفات : للتأكد من الملفات الضارة في المرفقات



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

    تناقشت وصديقي العزيز Developer حول دالة تقوم بعملية التأكد من الملفات التي يتم تحميلها في المرفقات ، المهم بعد نقاش طويل قمت ببرمجة هذه الدالة والتي يتمحور عملها في ثلاث نقاط

    الاولى : فحص امتدادات الملفات واذا كان الملف ممنوع تعيد false
    الثانية : فحص نوع الملف ، فاذا كان صورة تفحص نوع الصورة واذا كان غير مسموح به تعيد false
    الثالثة : اذا كان نوع الملف نصي تقوم بفحص محتويات الملف اذا كان يحتوي على tags ممنوعة تعيد
    false واذا كان يخلو من ذلك كله تعيد true

    الان الدالة :

    كود PHP:

    function filerFiles($_file$mime_type$allowed_images = array(), $allowed_other_extensions = array(), $prevent_tags = array())
    {
            if (!
    is_array($allowed_images) || count($allowed_images) == 0) {
                    return 
    false;
            }

            if (!
    is_array($allowed_other_extensions) || count($allowed_other_extensions) == 0) {
                    return 
    false;
            }

            if (!
    is_array($prevent_tags) || count($prevent_tags) == 0) {
                    return 
    false;
            }

            
    $path pathinfo($_file);

            
    $allextensions array_merge($allowed_images$allowed_other_extensions);

            
    // First check extension
            
    if (!in_array($path['extension'], $allextensions)) {
                    return 
    false;
            }

            
    // Second check mime type
           // $mime_type = mime_content_type($_file);
            
    $mime explode('/'$mime_type);

            if (
    $mime[0] == 'image') {
                    if (!
    in_array($mime[1], $allowed_images)) {
                            return 
    false;
                    }
            } elseif (
    $mime[0] == 'text') {
                    
    // Check file content
                    
    $file_content file_get_contents($_file);

                    
    $risk false;

                    foreach (
    $prevent_tags as $value)
                    {
                            if (
    strpos($file_content$value) !== false) {
                                    
    $risk true;
                                    break;
                            }
                    }

                    if (
    $risk) {
                            return 
    false;
                    }
            } else {
                    return 
    true;
            }

            return 
    true;

    الدالة تحتوي على 5 parameters

    الاول : ( _file ) الملف
    الثاني : ( mime_type ) نوع الملف مثلا : image/gif او text/plain
    الثالث : ( allowed_images ) مصفوفة بها انواع الصور المسموح بها مثل jpg, jpeg, gif, png
    الرابع : ( allowed_other_extensions ) مصفوفة بها انواع الملفات الاخرى المسموح بها لكن لا نضع الصور هنا ، وتكون مثل zip, txt
    الخامس : ( prevent_tags ) مصفوفة بها tags الممنوعة مثلا
    كود PHP:
    <?, <?php?>, dl(, system(, shell
    بقي الان مثال على استخدام الدالة

    كود PHP:

    var_dump(filerFiles('./mypic.jpg', // file path
                        'image/jpeg',     // mime type
                        array('jpeg', 'jpg'), // allowed images
                        array('zip', 'txt'),  // allowed extensions
                        array('shell', '<?php', '?>', '<?'))); // prevent tags
    والان ننتظر اقتراحاتكم و ارائكم







    __________________
    AlwatanVoice, www.alwatanvoice.com
    Almashroo, www.almashroo.com

    Pal Coder == Palestinian Coder


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2003
    المشاركات
    461


    صحيح في كود نسيته

    كود PHP:
    unset($file_content); 
    بعد foreach

    :nice:





    __________________
    AlwatanVoice, www.alwatanvoice.com
    Almashroo, www.almashroo.com

    Pal Coder == Palestinian Coder

  3. #3
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    يعطيكم العافية يا شباب .. تعديلاتي السريعة وقابلة للنقد ترى

    كود PHP:
    function filerFiles($_file$mime_type$allowed_images = array(), $allowed_other_extensions = array(), $prevent_tags = array()) {
     if (!
    is_array($allowed_images) || count($allowed_images) == || !is_array($allowed_other_extensions) || count($allowed_other_extensions) == || !is_array($prevent_tags) || count($prevent_tags) == 0) return false;
     
    $path pathinfo($_file);
     
    $allextensions array_merge($allowed_images$allowed_other_extensions);
     
    // First check extension
     
    if (!in_array($path['extension'], $allextensions)) return false;
     
    // Second check mime type
     // $mime_type = mime_content_type($_file);
     
    $mime explode('/'$mime_type);
     if (
    $mime[0] == 'image') {
      if (!
    in_array($mime[1], $allowed_images)) return false;
     } elseif (
    $mime[0] == 'text') {
      
    // Check file content
      
    $file_content file_get_contents($_file);
      foreach (
    $prevent_tags as $value) {
       if (
    strpos($file_content$value) !== false) return false;
      }
      unset(
    $file_content);
     }
     return 
    true;

    تحياتي، أشرف السمهوري






  4. #4
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    731


    ضع مثال كامل حتى نناقشه ويستفيد المبتدئين ,,

    أنت مررت كل شيء للدالة بدلاً من جعلها تتحقق بذاتها وتحديد نوع الملف





    __________________
    Saudi Wanderer
    My Blog : SWanderer

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    309


    عزيزي Pal Coder

    دالة جيدة وبارك الله فيك

    سلامات





    __________________
    Bruce - مدونة شديدة التخصص في PHP وتطبيقات الويب

  6. #6
    عضو نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    255


    شكررا لك اخي العزيز Pal Coder

    ياليت ترسل لي بريدك الشخصي على بريدي هذا tm3d (a) hotmail

    احتاجك في امر هام جدا جدا بارك الله فيك ،،






  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2003
    المشاركات
    461


    اخي اشرف
    التعديلات لم تغير في جوهر عمل الدالة وانما في شكل الكود ، لكن في كود كان مكرر مرتين وجيد انك حذفته ، لانه عندما كتبت الكود كان جهازي يفصل لحاله فنسيت الكود كله

    اخي S.Wanderer
    اولا الدالة عملها فقط التأكد من الملفات يعني تكون داخل نظام التحميل الذي تبرمجه انت ، وكما تريد اليوم سوف اقوم بعمل مثال تحميل كامل
    وعلى فكرة انا كتبت ملاحظة لكنها انحذفت بطريق الخطأ حول نوع الملف ، نوع الملف يكون عن طريق
    كود PHP:
    $_FILES['file']['type'
    اخي Bruce
    بارك الله فيك

    اخي Abo-Ahmed
    العفو وتمت مراستلك





    __________________
    AlwatanVoice, www.alwatanvoice.com
    Almashroo, www.almashroo.com

    Pal Coder == Palestinian Coder

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    731


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

    اخي S.Wanderer
    اولا الدالة عملها فقط التأكد من الملفات يعني تكون داخل نظام التحميل الذي تبرمجه انت ، وكما تريد اليوم سوف اقوم بعمل مثال تحميل كامل
    وعلى فكرة انا كتبت ملاحظة لكنها انحذفت بطريق الخطأ حول نوع الملف ، نوع الملف يكون عن طريق
    كود PHP:
    $_FILES['file']['type'
    اخي Bruce
    بارك الله فيك

    اخي Abo-Ahmed
    العفو وتمت مراستلك
    أولاً أشكرك على مشاركتنا الكود وفتح باب الحوار ووفقك الله
    هذا ما أردت الوصول إليه , بوجود مثال كامل نستطيع نقد الكود ومناقشته حتى يستفيد الجميع

    تقول :
    اقتباس المشاركة الأصلية كتبت بواسطة Pal Coder
    وعلى فكرة انا كتبت ملاحظة لكنها انحذفت بطريق الخطأ حول نوع الملف ، نوع الملف يكون عن طريق
    كود PHP:
    $_FILES['file']['type'
    كيف تثق بما يمليه عليك المتصفح ؟ هذه الطريقة بالإمكان التلاعب بها.





    __________________
    Saudi Wanderer
    My Blog : SWanderer

  9. #9
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    779


    كيف تثق بما يمليه عليك المتصفح ؟ هذه الطريقة بالإمكان التلاعب بها.
    عذرا اخي S.Wanderer
    كيف يمكن التلاعب بهذا الكود ؟؟

    هل ممكن مثال ؟





    __________________
    أهلا و سهلا بكم في :-
    موقع دار الأوائل
    تفضل معنا خدمات الاستضافة
    موقع العبقري لخدمات الاستضافة

  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    731


    اقتباس المشاركة الأصلية كتبت بواسطة عبقري العرب
    عذرا اخي S.Wanderer
    كيف يمكن التلاعب بهذا الكود ؟؟

    هل ممكن مثال ؟
    بإذن الله سوف أكتب مقال تفصيلي حول رفع الملفات والمشاكل الأمنية الشائعة به , وسيكون مدعماً بأمثلة لكيفية تجاوز أي إجراء خاطئ.

    بإمكاننا تحديد نوع ال MIME مسبقاً في ال Header المرسلة ,, من خلال الكود السابق نحن نأخذ المعلومات المستقبلة والتي لا نثق بمحتواها





    __________________
    Saudi Wanderer
    My Blog : SWanderer

  11. #11
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2003
    المشاركات
    461


    اسف للـتأخير في الرد ،

    لقد بحثت في الموضوع بسرعة ووجدت عدة طرق منها

    الطريقة الاولى type
    الثانية mime_content_type
    الثالثة عن طريق FileInfo ولكنها تحتاج مكتبة magic_open مع العلم ان هذه الطريقة بديلة للطريقة الثانية
    الرابعة getimagesize

    فاذا كنت تعرف طريقة اخرى ارجو وضعها ولنتناقش حولها

    على العموم ، كما نبهني اخي Developer الدالة بها بعض العيوب وساحاول ان اقوم بإصلاحها غدا ان شاء الله اذا امكن





    __________________
    AlwatanVoice, www.alwatanvoice.com
    Almashroo, www.almashroo.com

    Pal Coder == Palestinian Coder

  12. #12
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    731


    لا عليك أخي الحبيب ,, لا يوجد كود خالي من العيوب

    لي عوده مفصلة للموضوع حتى نستفيد من بعض , وأنت أخبرنا ما تتوصل إليه أثناء بحثك







    __________________
    Saudi Wanderer
    My Blog : SWanderer

  13. #13
    عضو نشيط
    تاريخ التسجيل
    Mar 2005
    المشاركات
    281


    دالة جميلة أخي العزيز أهنئك عليها ، للأسف لم يتح لي الوقت لتجربتها - وإقامة الاختبارات عليها -
    ولكن كنظرة مبدأية فهي دالة جميلة

    وفكرتها "لزيزة"

    ولربما تفتح باب للتفكير بحل أكبر مشاكل البرمجة والتي تعيق الحماية بشكل كبير ألا وهي المرفقات و ما أدراك ما المرفقات وما تحويه .

    لديّ بعض النصائح :
    أولا دعك من الصور فالكثير من المبرمجون يعرفون كيفية التعامل مع الملف ان كان صورة أو خلافه
    ثانياً تعمّق في موضوع الملف النصي وملفات البرمجة لربما لتح لنا كمبرمجين حرية أكبر في تحميل المرفقات حاول أن تضع للملفات النصية وملفات البرمجة كود ليحميها من أكواد معينة ولربما الـ html أيضاً حتى يفتح لنا باب تحميل مرفقات بقيود أقل

    هذا ما لديّ وإن كان ما قد قلته لا يقلل من "لزازة" الدالة وإعجابي بها

    أنت دوماً السباق للإبداع عزيزي Pal Coder وأعذر لي أي خطأ لإنقطاعي الطويل عن البرمجة

    ولنا لقاء










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

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