اشترك في مجموعة montadaphp.net حتى تصلك أخبار المنتدى  

بريدك الإلكتروني:

صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 20 من 24
شجرة الإعجاب21إعجاب

الموضوع: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

  1. #1
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع




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

    إخوانى الكرام

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

    و قبل أن نبدأ أحب أن أنوه إلى أن كل من هو مهتم بهذا الأمر فعليه قراءة الموضوع ببعض من التأنى و عدم القفز فوق النقاط

    قد ترى أن الموضوع أغلبه نصى و يحتاج إلى الكثير من القراءه

    لكن ثق بأك إن قرأت الموضوع بتأنى ستحصل على فائده كبيره بعون الله

    الأن نسم بإسم الله العلى العظيم ثم نتوكل على الحى الذى لا يموت

    من اهم المهام في مواقع الانترنت التفاعلية هي مهمة رفع او تحميل الملفات بمختلف انواعها الى سيرفر الموقع قد تكون هذه الملفات صور او فيديو وفي بعض الحالات يتطلب عمل الموقع رفع ملفات تنفيذية قد تكون ملفات مرفقة او مضغوطة او شروحات وغيرها الكثير مما قد يشكل خطر على عمل الموقع بشكل عام. وفي هذه الدراسة سنتطرق الى افضل حلول حماية وتأمين سكربت وتطبيقات رفع الملفات الى سيرفر الموقع بتفاصيل متقدمة تشمل جميع مراحل الحماية قبل الرفع من جهة المتصفح الى مرحلة معالجة الملف في مجلد الملفات المؤقتة الى مرحلة انشاء وكتابة الملف النهائي الى المسار الصحيح وفي النهاية مسح الملف والتأكد من خلوه من الفايروسات وملفات التجسس وغيرها من البرامج التي قد تسبب اضرار لمستخدمي الموقع مع الملاحظة ان هذه الدراسة تبحث في الاساسيات المشتركة مهما اختلف نظام التشغيل او خادم الموقع وكذلك لغة البرمجة المستخدمة PHP,JSP,ASP

    اولاً:- مرحلة التدقيق والتأكد من الملف
    عند اضافة مهمة رفع ملف الى موقع تكون البداية صفحة الانترنت HTML وبالتحديد فورم الرفع وهو عبارة عن حقل وزر امر ليتمكن الزائر من تصفح الجهاز الخاص به واختيار الملف ويكون ترميز html للفورم بهذا الشكل

    كود PHP:
     <form enctype="multipart/form-data" action="upload.php" method="POST">
    اختر الملف: <input name="uploadedfile" type="file" /><br />
    <
    input type="submit" value="Upload File" />
    </
    form
    عند ضغط زائر الموقع على الامر "اختر الملف "او Browse.. تظهر له نافذة اختيار ملف من الجهاز الخاص به بعد مرحلة تحديد الملف يمكن رفعة عنطريق الامر Upload File . الى هذه المرحلة لا يوجد اي تدقيق أمني يجب القيام به ما عدى بعض الاجراءات البسيطة لتحديد حجم الملف قبل عملية الرفع مثال 100KB بالاضافة الى تحديد خصائص اخرى مثل MAXLENGTH وغيرها.

    كود PHP:
     <input type='hidden' name='MAX_FILE_SIZE' value='100000' /> 
    تبدأ جميع مراحل التدقيق الأمني بعد تنفيذ الامر Upload File ولتوضيح جميع هذه المراحل يجب ان نعرف ماذا يحدث وبالتفصيل بين المتصفح وخادم الموقع الخاص بنا عند تنفيذ المستخدم امر رفع الملف. تبدأ هذه العملية بارسال طلب رفع الملف من المتصفح الى صفحة الرفع المحددة ويحتوي هذه الطلب على مقدمة تحتوي تفاصيل الطلب مثل نوع الطلب و اللغة المستخدمة ونوع المتصفح وغيرها ما يهمنا هو القسم الخاص بالملف المرسل للرفع وعادة ما يكون بهذا الشكل مثال ارسال طلب رفع ملف نوع صورة اسم الملف file2.gif

    كود PHP:
        POST /upload.php HTTP/1.1
    Host
    127.0.0.1
    User
    -AgentIE6
    Content
    -Length156
    Content
    -Typemultipart/form-databoundary=xYzZY
    Content
    -Dispositionfilefilename="file2.gif"
    Content-Typeimage/gif
    Content
    -Transfer-Encodingbinary

    ...contents of file2.gif...
    --
    BbC04y--
    --
    AaB03x-- 
    يوجد هنا 4 متغيرات مهمة وهي اسم الملف filename نوع الملف Content-Type وفي الاخير محتوى الملف contents of file2.gif بالاضافة للمتغير المهم الرابع وهو حجم البيانات او حجم الملف ويعرف ب Content-Length هذه 4 متغيرات هي التي ترسل في مختلف الانظمة والخوادم ولغات البرمجة ولذلك تجدها في لغة مثل php بهذا الشكل:-
    1- اسم الملف FILES[‘file’][‘name’] وفي asp تجدة HttpPostedFile.FileName
    2- نوع الملف FILES[‘file’][‘type’] وفي asp تجدة HttpPostedFile.ContentType
    3- حجم الملف FILES[‘file’][‘size’] وفي asp تجدة HttpPostedFile.ContentLength
    4- بيانات الملف وتمثل مسار وجود الملف المؤقت FILES[‘file’][‘tmp_name’]

    وبذلك يمكن تقسيم اول مرحلة للتدقيق الامني بهذا الشكل
    1- اسم الملف: مرحلة التدقيق على امتداد الملف
    2- نوع الملف: مرحلة التدقيق على نوع الملف
    3- حجم الملف: مرحلة التدقيق على حجم الملف
    4- بيانات الملف: مرحلة التدقيق على محتوى الملف

    اسم الملف : مرحلة التدقيق على امتداد الملف
    في البداية ما هو امتداد الملف Filename extension هو ملحق اسم الملف وتمثل الاحرف بعد آخر نقطة مثل gif صورة او mpg فيديو exe برنامج ويستخدم امتداد الملف في انظمة الكمبيوتر لتوضيح نوع الملف ومحتواه. وبهذه الطريقة يمكن التدقيق على امتداد الملف المراد تحميلة الى خادم الموقع ومعرفة نوع الملف ومحتواه وبذلك يمكن تحديد الملفات المسموح برفعها مثل الصور او الفيديو او الملفات المضغوطة او ملفات اوفيس وفي هذا المثال توضيح لطريقة الاستفادة من معرفة امتداد الملف والسماح للمستخدم برفع الملفات الغير تنفيذية والتي تستخدمها اغلب المواقع

    كود PHP:
     $file $_FILES['uploadedfile'];
    $allowedExtensions =  array("jpg","jpeg","gif","png","doc","pdf","ppt","zip","rar","xls","pptx","docx","xlsx"); 
    if (!
    in_array(end(explode('.',$file['name'])),$allowedExtensions)) { 
    echo 
    'عفواً...الملفات المسموح برفعها هي:jpg, jpeg, gif, png,doc,pdf,ppt,zip,rar';
    exit(
    0);

    نوع الملف : مرحلة التدقيق على نوع الملف
    في هذه المرحلة سنقوم بمعرفة نوع الملف من خلال البيانات المرسلة من المتصفح قد يذكر البعض انه في المرحله السابقة تم تحديد نوع الملف فما هو المقصود بنوع الملف هنا ؟ والمرسل من قبل المتصفح في الحقيقة يمكن ان يكون هنالك اختلاف بسيط وسيتم توضيحه في هذه المرحله تعرفنا في المرحلة السابقة على امتداد الملف وهي الطريقة التي يتبعها نظام التشغيل لمعرفة انواع الملفات ومحتواها وهي اخر احرف وهكذا في شبكة الانترنت الوضع يختلف لأن امتداد الملفات المستخدم في الانظمة يختلف من نظام الا آخر مثل اختلافه في وندوز ولينكس وكذلك نوع نظام الملفات في انظمة التشغيل مثل FAT32 و NTFS تكون فيها امتدادات الملفات مختلف وغيرها من الاختلافات بين انظمة تشغيل الكمبيوتر هذه الفروقات صعبت عملية تحديد نوع الملف في شبكة الانترنت والمتصفحات والسبب ان بروتوكولات الانترنت تصل بين مختلف الاجهزة بمختلف انظمة التشغيل وظهرت الحاجه لاصدار نظام جديد لتعريف انواع الملفات ومحتواها لمختلف الانظمة عبر شبكة الانترنت وقد اطلق عليه MIME type او نظام وسائط الانترنت Internet media type.
    وبذلك فإن متصفح الانترنت عندما يقوم المستخدم باختيار صوره من جهازة يتم ارسالها الى خادم الموقع يستخدم هذا النظام لتحديد نوعية الملف ويقوم بارسالها الى خادم الموقع مثال Content-Type: image/gif وتوجد انواع كثيرة للملفات مثل ملف مضغوط نوع zip يكون في انظمة التشغيل امتداد .zip وفي نظام وسائط الانترنت application/zip وتجد في هذه القائمة انواع الملفات المختلفه
    http://www.intollogy.com/ar/research/mime type.html
    يمكن الاستفادة من اعادة التدقيق على نوع الملف في هذه المرحله عن طريق انواع وسائط لانترنت او MIME type بالشكل التالي

    كود PHP:
     $file =$_FILES['uploadedfile'];
    if(
    $file['type']=='application/zip'){
    ...
    }else if(
    $file['type']=='application/rar'){
    ...
    }else if(
    $file['type']=='application/pdf'){
    ...
    }else if(
    $file['type']=='image/gif'){
    ....
    }else if(
    $file['type']=='image/jpeg'){
    ....
    }else if(
    $file['type']=='image/png'){
    .....
    }else{
    echo 
    "عفواً...الملفات المسموح برفعها هي:jpg, jpeg, gif, png,doc,pdf,ppt,zip,rar");
    exit(
    0);

    حجم الملف : مرحلة التدقيق على حجم الملف
    في هذه المرحله نقوم باجراء التدقيق على حجم الملف وهي مرحله مهمة لعمل الموقع ويمكن تحديد الحجم المناسب من خلال معرفة موارد السيرفر وقدرة استيعابة وكذلك من خلال اعدادات مترجمات لغة البرمجة مثل php ومعرفه الحد المسموح لحجم الملف وفي هذا الملف سنحدد حجم الملف 1MB
    كود PHP:
     if ($file['size'] > 1024000// 1024000 byte = 1 MB
    echo ' خطا : حجم الملف اكبر من 1 ميجابايت'
    وتوجد في هذه المرحله ملاحظة قد يغفل عنها الكثير وهي عدم الاكتفاء بالحجم الاعلى للملف وانما التدقيق على الحجم الادنى وهي مفيدة جداً

    كود PHP:
     if ($file['size'] < 1// = 0 byte
    echo ' الملف الذي تم اختياره فارغ'
    بيانات الملف : مرحلة التدقيق على محتوى الملف
    في الحقيقة تعتبر أهم مرحله وعلى الرغم من ذلك لاينتبه اليها اغلب مبرمجي المواقع و بالتحديد مبرمجي PHP وسيتم توضيح هذه المرحله بشيء من التفصيل. في البداية اليك هذا المثال اذا كان هنالك موقع مختص برفع الملفات وقام مدير الموقع بطلب استشارة امنية لموقعه فستجد ان المعلومه الاولى التي سيحصل عليها وبنسبة 90% هي :- ان يكون الموقع مبرمج بلغة جافا ! ويمكن التاكد من ذلك بتصفح اكبر مواقع الملفات مثال 4shared لماذا ؟ السبب هو هذه المرحله لأن بنية لغة الجافا تعتمد على هذه المرحله فقط للتدقيق على الملف وهي المحتوى في حين مختلف اللغات تعتمد على المراحل السابقة. والسؤال هنا هل يمكن الاستفاده من مرحله التدقيق على الملف المعتمدة في لغة الجافا واستخدامها في لغات اخرى مثل PHP بكل تأكيد نعم. وهنا يمكن اضافه هذه المعلومة أنة لا يوجد مفهوم اسمه اختلاف امني بين لغات البرمجة وهذا الخطأ تقع فيه اكبر شركات الاستشارات الامنيه وسبب هذا المفهوم الخاطئ ان اغلب اللغات المتطورة مثل php و asp قامت بإضافة دوال ومتغيرات كثيرة لتسهيل عمل المبرمج ولكن هذه السهوله ادت الى ظهور عيوب امنيه. ولشرح جميع هذه المفاهيم بمثال عملي تجد في لغة PHP متغير باسم $_FILES يحتوي على جميع البيانات المرسلة وهذا لا تجدة في لغة جافا هذا المتغير $_FILES سهل عملية معرفة جميع تفاصيل الملف وجعلت المبرمج يعتمد عليه كما هو موضح في المراحل السابقة. ولكن هل تعلم ان جميع المراحل السابقة غير موثوقة 100% ماذا لو لم نستخدم متصفح انترنت وقمنا بارسال طلب الى الموقع بطريقة برمجية وغيرنا نوع الملف وحجمه ؟ في هذه المرحله بالتأكيد ننصحك بنسيان جميع معلومات متغير $_FILES وركز فقط على الدوال الاساسية في لغة PHP كما هو الحال في لغة جافا. اليك هذا المثال وهو ارسال طلب الى صفحة الموقع الخاصة برفع الملف والتي تعتمد على معلومات $_FILES لو قمنا بارسال هذه البيانات المزورة للطلب :-

    كود PHP:
     POST /upload.php HTTP/1.1
    Host: 127.0.0.1
    User-Agent: IE6
    Content-Type: multipart/form-data; boundary=AaZzXx
    Content-Length: 155
    --AaZzXx
    Content-Disposition: form-data; name="userfile"; filename="shell.php"
    Content-Type: image/gif
    <?php
    system
    ($_GET['command']);
    ?>
    --AaZzXx--
    هل تعلم انه في متغير $_FILES سيظهر نوع الملف بانه نوع صورة وهو في الحقيقة شفرة برمجية وكذلك حجم الملف يمكن التلاعب به ولذلك سنقوم الآن بجميع مراحل التدقيق السابقة بالاعتماد على محتوى الملف وتجاهل خصائص الملف المرسلة من خلال متصفح الانترنت وهي الطريقة الافضل لمختلف اللغات والتي تجعلها متساوية من الناحية الامنية وطريقتها واحدة ومتشابهة. ذكرنا في ما سبق انه بعد قيام المستخدم اختيار الملف من جهازة لرفعة الى الموقع يقوم المتصفح بمعرفة نوع الملف وحجمة ومحتواه وارسالها الى سيرفر الموقع. تجاهل جميع المعلومات المرسلة من المتصفح ما يهمنا هو محتوى الملف وفي جميع خوادم وسيرفرات المواقع يتم تخزين الملف الذي تم رفعة في البداية في مجلد الملفات المؤقتة ويكون بلا نوع ولا امتداد فقط محتوى الملف وهذا ما يهمنا اول خطوة هي معرفة مسار الملف ويكون المسار مخزن في المتغير $file['tmp_name'] بمعنى هذه المعلومة الوحيدة التي نحتاجها من متغير $_FILES بعد ذلك نتبع الخطوات التالية حجم الملف :

    كود PHP:
     $filesize filesize($file['tmp_name']); 
    ونكون قد حصلنا على الحجم الفعلي للملف مهما تم التلاعب في الطلب المرسل الى خادم الموقع نوع الملف : لمعرفة نوع الملف بدقة عالية مهما تم التلاعب في امتداد الملف او نوع وسائط الانترنت نقوم في الخطوة الاولى بقرائة محتوى الملـــف

    كود PHP:
     $handle fopen($file['tmp_name'], 'r');
    $filedata fread($handle,$filesize);
    fclose($handle); 
    الآن المتغير filedata يحتوي على كامل بيانات ومحتوى الملف المراد رفعه الى الموقع الخاص بنا في هذه المرحله يبدأ التدقيق والتحليل الامني المفصل وتكون البداية دائما مايعرف بتوقيع الملف File signature
    ماهو توقيع الملف File signature ؟
    من الجدير بالذكر انه كل ما تطورت الانظمة او اختلفت لغات البرمجة واردنا الوصول الى مراحل متقدمة في مجال الامن الالكتروني او التكنولوجيا بشكل عام فإننا نعود الى الصفر او بمعنى اصح الى 1 و 0 وهذا المفهوم هو ما نبتعه في انتولوجي وهو دمج خبرات مبرمجي لغات متقدمة مثل لغات الآله والاسمبلي والسي مع خبرات مطوري المواقع وقواعد البيانات والتصميم لدينا وينتج عن ذالك اعمال ومنتجات متقدمة في هذا المجال
    توقيع الملف File signature : هو ترميز يستخدم داخل الملف للتحقق من نوع الملف معظمها يتكون من 2-4 بايت في بداية محتوى الملف والنوع الاخر من التواقيع يكون عبارة عن مجموعة بايتات عبارة عن كتل موزعة في مختلف بيانات الملف البداية او المنتصف او النهاية وقد استخدم توقيع الملف في مجال الامن والحماية منذ بداية عصر التكنولوجيا ولازال يستسخدم الى الآن ويمثل اليه عمل جميع برامج مكافحة الفايروسات يتكون غالبا التوقيع من ترميز هيكس قد يحتوي على رموز في الغالب ليس لها احرف مفهومة مثال توقيع ملف zip يجب ان يحتوي اول سطر من البيانات على 4 بايت تمثل التوقيع التالي 50 4B 03 04 وبهذا الشكل لمختلف الملفات تجد قائمة لمختلف انواع الملفات وتواقيعها في الرابط
    http://www.intollogy.com/ar/research/file_signatures.html
    بعد قرائة محتوى الملف في المتغير filedata تكون جميع البيانات عبارة عن 0 و 1 وهي لغة الآله بعد قرائة هذه البيانات يتم تحويلها الى ترميز هيكس او النظام الست عشري HEX عن طريق الداله :-

    كود PHP:
     $filedata bin2hex($filedata); 
    نظام الهيكس هو عبارة عن ارقام من 0-9 بالاضافة الى احرف من A-F ولانه يحتوي على احرف ونرغب بمقارنتها مع تواقيع الملفات يجب تحديد حجم الاحرف اما ابقائها كما هي صغيره او جعلها جميعها كبيرة uppercase عن طريق الداله

    كود PHP:
     $filedata strtoupper($filedata); 
    الآن متغير filedata يحتوي جميع بيانات الملف بترميز هيكس HEX وهو جاهز لعملية البحث عن تواقيع الملفات في محتواه وتحديد نوع الملف ويتم ذلك عن طريق دوال النصوص بهذه الطريقة ومثال على ذلك ملف نوع ZIP وتوقيعه هو الازاحه او سطر 0 توقيع هيكس 504B0304 :-

    كود PHP:
        if (substr($filedata,0,4*2) == '504B0304')
    {
    echo 
    '<H1>الملف الذي تم اختياره نوع ZIP</H1>';
    return 
    true;

    تلاحظ انه ولغرض التوضيح في داله substr استخدمنا 4*2 ولم نضع 8 لانه في الدال النصيه كل حرف او رقم يعتبر 1 بايت بينما في التواقيع او ترميز هيكس كل زوجين من الارقام او الاحرف يعتبر 1 بايت بمعنى الحجم الكلي للتوقيع 4 بايت واضفنا *2 للتوافق مع داله النصوص مثال اخر لتحديد نوع ملف صورة PNG

    كود PHP:
     if (substr($filedata,0,8*2) == '89504E470D0A1A0A')
    {
    echo 
    '<H1>الملف الذي تم اختياره نوع PNG</H1>';
    return 
    true;

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

    كود PHP:
     $imageinfo getimagesize($file['tmp_name']);
    //check 1 = GIF, 2 = JPG, 3 = PNG
    if($imageinfo[2]!=and $imageinfo[2]!=and $imageinfo[2] !=3){
    echo (
    "نوعية الصورة التي تم اختيارها غير صحيح النوعيات المسموح بها jpg, jpeg,  gif, png");


    مثال التعرف على تواقيع ملفات برامج المكتب مايكروسوفت اوفيس الاصدارات القديمة DOC,PPT,XLS وغيرها

    كود PHP:
        if (substr($filedata,0,8*2) == 'D0CF11E0A1B11AE1')
    {
    echo 
    '<H1>الملف الذي تم اختياره احد مجموعه برامج اوفيس DOC,PPS,PPT,XLS..</H1>';
    return 
    true;
    // ملاحظة يمكن ايضا تحديد نوع الملف بالتحديد عن طريق مايعرف بلوك 512
    // ملف اكسل Excel09 08 10 00 00 06 05 00 (hex) السطر 513


    بعد ان تعرفنا على مرحلة التدقيق على نوع الملف من خلال التواقيع وجب التنويه انه يمكن استخدام جميع وسائل التدقيق لانتاج تطبيقات ذات جودة عالية من الناحية الامنية بمعنى استخدام التدقيق على الملف من خلال الامتداد + التاكد مرة اخرى من خلال نوع الملف المرسل من قبل المتصفح وفي النهاية التاكد من صحه المعلومات السابقة عن طريق توقيع الملف لكشف اي محاولة للتلاعب في البيانات المرسلة ومنع المستخدم من تكرار هذه المحاولات حتى لو لم يتم رفع الملف. وتوجد افكار عديدة في هذه المرحله ومثال تعطيل اكواد لغة برمجة مثل php في حال تجاوز جميع مراحل التدقيق مع ملاحظة تعطيل short tag في ملف php.ini مثل <? ?> :-


    كود PHP:
     $filedata preg_replace("/\<\?php/is","< php"$filedata); 

    ثانياً:- مرحلة مسح الملف من الفايروسات
    الى الآن يوجد الملف الذي تم رفعه في مجلد الملفات المؤقتة tmp وجميع اجراءات التدقيق تتم هنا ولم يتم نقله الى مسار الموقع الخاص بعد ان قمنا بالتدقيق في المراحل السابقة وتأكدنا من صحه وسلامه الملف بقيت نقطه اخرى وهي سلامه اجهزة زوار الموقع وعدم تعرض اجهزتهم لفايروسات او ملفات تجسس قامو بتنزيلها من خلال موقعنا.
    والفكرة العامة للمسح الامني هي ان برامج الفايروسات تصدر دوال خاصة للمسح عن الفايروسات يمكن ان تستخدم من خلال لغات برمجة مختلفة خارج برنامج الفايروسات ومثال على مسح ملفات الموقع والتأكد من خلوها من الفايروسات Anti Virus Scan باستخدام برنامج مكافحة الفايروسات ClamAV ومكتبة دعم تطبيقات ال PHP هي php-clamavlib وتقدم الدوال التاليه cl_info, cl_scanfile, cl_setlimits ومثال على استخدامها:-


    كود PHP:
     cl_setlimits(51000200010485760);
    if(
    $malware cl_scanfile($_FILES['file']['tmp_name'])) $error .= 'We have  Malware: '.$malware.'<br>ClamAV version: '.clam_get_version(); 

    عند هذه المرحله قد يذكر البعض هذه الملاحظة اننا ذكرنا سابقا انه لايوجد مفهوم يسمى اختلاف امني بين لغات البرمجة وعند هذه المرحله تظهر معلومات جديدة تؤكد انه يوجد اختلاف امني بين لغات البرمجة والدليل ان لكل برنامج للمسح عن الفايروسات محرك يعرف بمحرك المسح عن الفايروسات Antivirus Scan Engine هذه المحركات في اغلب برامج مكافحة الفايروسات لا تدعم لغة مثل PHP او ASP وغيرها من اللغات المتطورة في حين انك تجد دعم كامل لها للغة جافا مثل Java API Symantec Scan Engine في الحقيقة هذه المعلومات صحيحة ولكنها قديمة بعض الشيء وليست دقيقه والدليل على ذلك ظهور ما يعرف ب Metascan وهو نظام يقدم دوال API للمسح على الفايروسات لمختلف لغات البرمجة ويقوم بالمسح في اكثر من 8 محركات لاشهر برنامج مكافحه الفايروسات. وبذلك يمكن ان نؤكد انه لا يوجد مقهوم اختلاف امني بين لغات البرمجة ولكن هنالك اختلافات في الامكانيات والسرعة والاداء بكل تأكيد وهذا المجال سوف نخصص له دراسات تفصيلية لمقارنة الفروقات بين اللغات ومتى يمكن ان تحدث.
    ثالثاً:- مرحلة انشاء وكتابة الملف
    في هذه المرحله وبعد انتهاء جميع مراحل التدقيق سنقوم بنقل الملف من مجلد الملفات المؤقتة وتسميته واعادة كتابتة في مسار الموقع قد لا تقل اهمية هذا المرحلة عن المراحل السابقة لحماية وتأمين سكربت رفع الملفات وتوجد لها قواعد عديدة وهي تشبه الى حد ما المرحله السابقة ومن اهم قواعد مرحلة انشاء وكتابة الملف هي :-

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

    كود PHP:
     $newfilename $user_id.'_'.time().'_'.rand(1,9999); 

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

    كود PHP:
         // Zip
    if (substr($filedata,0,4*2) == '504B0304')
    {
    $newfilename .='.zip';
    }
    // PDF
    if (substr($filedata,0,4*2) == '25504446')
    {
    $newfilename .='.pdf';


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

    كود PHP:
     $handle fopen($newfile'w+');
    fwrite($handle$filedata);
    fclose($handle); 

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

    رابعاً:- مرحلة حماية مسار رفع الملف - مجلد التخزين
    لنفترض اننا اخترنا المسار التالي لتخزين وكتابة الملفات بعد عملية الرفع var/html/www/upload ومن خلال هذا المسار يتضح ان الملفات يتم تخزينها بداخل الموقع في حين ان بعض الملاحظات الامنيه تنصح بتخزين الملفات خارج محتوى الموقع بمعنى قبل مجلد او مسار صفحات الموقع هذه الملاحظة مفيدة والسبب في ذلك عدم قدرة مستخدم الموقع الوصول اليها او تنفيذها ولكن هذه الطريقة ينتج عنها بعض الاخطاء الامنيه لانها تعتمد على قرائه الملف برمجيا وعرضة للمستخدم. ونحن في هذه الدراسة سندمج الفكرتين معا بمعنا انشاء مجلد التخزين بداخل محتوى الموقع وفي نفس الوقت سنقوم ببعض الاجراءات لمنع الوصول اليه او تنفيذ الملفات التي يحتويها ملف التخزين والحل بكل تأكيد ملف htaccess وسنقوم بإنشائة داخل مجلد التخزين واضافه التعليمات التالية

    كود PHP:
     ## السماح للملفات التالية فقط للوصول اليها
    deny from all
    <Files "^\w+\.(gif|jpg|png|jpeg|zip|rar|xls|pdf|doc|ppt)$">
    order deny,allow
    allow from all
    </Files>
    ## تعطيل جميع الملفات التنفيذية في المجلد
    Options -Indexes -ExecCGI
    RemoveHandler 
    .php .phtml .php3
    RemoveType 
    .php .phtml .php3
    php_flag engine off 

    وبهذا نكون قد قمنا بحماية مجلد تخزين الملفات من الوصول او تنفيذ اية اكواد برمجية في حال تم تجاوز جميع خطوات التدقيق الامني

    خامساً:- مرحلة التدقيق على التكرار للوقاية من هجمات Dos
    وفي النهاية حماية سكربت رفع الملفات من تكرار الطلبات التي قد تأثر على عمل الموقع بشكل عام وجميع وسائل حماية المواقع من هجمات رفض الخدمه Dos قد تكون متشابهة بمعنى انشاء قاعدة بيانات لأمن الموقع ويتم تسجيل جميع الطلبات القادمة الى الموقع ورقم ال اي بي IP للمستخدم وتحليلها لمنع تكرار الطلبات بمعنى تحديد عدد الملفات التي يمكن ان يرفعها المستخدم او زائر الموقع ونحن ننصح بشهدة بعمل قاعدة بيانات تعمل على سجل log لجميع الطلبات القادمة للموقع ونعتبر هذه العملية جزء اساسي من اجزاء برمجة الموقع.

    خلاصة الدراسة هي ان تتم عملية رفع الملفات الى الموقع بعدة مراحل هي:-
    1- مرحلة التدقيق على امتداد الملف Filename extension
    2- مرحلة التدقيق على نوع الملف MIME type
    3- مرحلة التدقيق على نوع الملف من خلال التوقيع File signature
    4- مرحلة التدقيق على حجم الملف من خلال المتصفح + محتوى الملف
    5- مرحلة مسح الملف من الفايروسات
    6- مرحلة انشاء وكتابة الملف
    7- القاعده الاولى لا تستخدم اسم الملف او امتداده المرسل من قبل المتصفح
    8- القاعدة الثانية كتابة الملف الجديد وليس نقله عن طريق move_uploaded_file
    9- مرحلة حماية مسار رفع الملف - مجلد التخزين
    10 -مرحلة التدقيق على التكرار للوقاية من هجمات Dos





    منقول للفائده

    مع خالص تمنياتى للجميع بدوام التوفيق
    التعديل الأخير تم بواسطة atefatwan ; 04-02-2013 الساعة 06:28 AM

  2. #2
    Webmaster
    "رب زدني علما"
    الصورة الرمزية يوسف الحمود
    تاريخ التسجيل
    24-12-2006
    المشاركات
    4,961
    معدل تقييم المستوى
    10

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    بارك الله فيك أخي عاطف ...
    موضوع مهم لكل مبرمج ...
    أسأل الله أن يكتب لك بكل حرف كتبته ألف حسنة ... وأن يضاعف الله لك الأجر والمثوبة ...

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


    من استفاد من مواضيعي أو كتاباتي وأحب رد الجميل لي ... فليدعو لي بأن يرزقني الله من خيري الدنيا والآخرة وأن يفتح علي أبواب الرزق ...

    قوانين منتدى بي اتش بي

    Regulations Montada PHP




  3. #3
    عضو شرف الصورة الرمزية SAIF.AJ
    تاريخ التسجيل
    03-07-2012
    السن
    26
    المشاركات
    225
    معدل تقييم المستوى
    6

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    من اقوى دروس الحماية التي قراتها

    الله يجعل بكل حرف حسنه لك ولكاتبه

    ربي يجزيك الخير
    يوسف الحمود و atefatwan معجب بهذا .
    Best regards

    Saif A. Jalajel

    Doha , Qatar

    Software Engineer

    Yii : Yes It Is

  4. #4
    مشرف الصورة الرمزية hamada10
    تاريخ التسجيل
    05-12-2009
    السن
    32
    المشاركات
    1,291
    معدل تقييم المستوى
    9

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    درس قوى جدا جدا
    ما شاء الله

    جزاك الله خيرا يا اخى
    يوسف الحمود و atefatwan معجب بهذا .

    سيد الاستغفار

    اللهم أنت ربي لا إله إلا أنت خلقتني وأنا عبدك وأنا على عهدك ووعدك ما استطعت أعوذ بك من شرما صنعت أبوء بنعمتك على وأبوء بذنبي فاغفر لي إنه لا يغفر الذنوب إلا أنت





    PHP-MySQL-HTML-CSS-Joomla-Ajax-Jquery-Vb6

    Developer

    الموقع الشخصى والاعمال السابقة

    http://www.hamada10.com

    السيــــرة الذاتية

    www.hamada10.com/cv.html



    لطلبات البرمجة

    www.hamada10.com/contact.html


    أخر الأعمال
    www.almshaheer.com



  5. #5
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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

    جزاك ربي كل خير ...
    و بارك ربى لك و عليك و أطال عمرك و أنار بصيرتك أخى الحبيب


    اقتباس المشاركة الأصلية كتبت بواسطة SAIF.AJ مشاهدة المشاركة
    من اقوى دروس الحماية التي قراتها

    الله يجعل بكل حرف حسنه لك ولكاتبه

    ربي يجزيك الخير
    و أثابك ربى بأعم أوزيد مما سألت لى أخى الكريم

    اقتباس المشاركة الأصلية كتبت بواسطة hamada10 مشاهدة المشاركة
    درس قوى جدا جدا
    ما شاء الله

    جزاك الله خيرا يا اخى
    و جزاك ربى بخير نعمه و أصبغها عليك ما ظهر منها و ما بطن
    hamada10 معجب بهذا .

  6. #6
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    السن
    38
    المشاركات
    3,788
    معدل تقييم المستوى
    14

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    مرجع جيد وشامل لحماية رفع الملفات في PHP
    شكرا للمشاركة
    atefatwan معجب بهذا .
    رُبّ أخٍ لك لم تلِدهُ أُمُّكَ
    الطموح يعني الحلم، أوله صبر وتفاؤل، وأوسطه اجتهاد وإرادة، وآخره نتيجة رائعة بإذن الله.

  7. #7
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    اقتباس المشاركة الأصلية كتبت بواسطة coder مشاهدة المشاركة
    مرجع جيد وشامل لحماية رفع الملفات في PHP
    شكرا للمشاركة

    بارك الله فيك أخى الكريم أبو عامر

  8. #8
    مشرف الصورة الرمزية عبد الواحد البشيري
    تاريخ التسجيل
    21-01-2007
    السن
    36
    المشاركات
    1,309
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    ويستحق التثبيت

  9. #9
    ممنوع من المشاركة مؤقتا الصورة الرمزية samy90
    تاريخ التسجيل
    28-11-2012
    المشاركات
    36
    معدل تقييم المستوى
    0

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    اقتباس المشاركة الأصلية كتبت بواسطة atefatwan مشاهدة المشاركة
    راجع الرابط التالى ستجد عليه ضالتك بإذن الله
    اقتباس المشاركة الأصلية كتبت بواسطة atefatwan مشاهدة المشاركة
    شكراااا وكنت قد قرات الموضوع من قبل
    لو تلاحظ ان التحقق
    يتم فقط من امتداد الملف فيمكن في هذه الحالة اعادة تسمية الملف من file.php
    الى file.jpeg ورفعه من دون ان يشتغل وهذا خطا يجب عدم السماح للملف اصلا من الرفع لان محتوه ليس صورة
    الى الان وجدت بعض مراكز التحميل لاتقبل الرفع اصلا اذا تم خداعها بهذه الخدعة والبعض يقبل الملف بس مايشتغل بس يستعرض بصورة
    يمكننا رفع ملف php.ini او .htaccess يقوم باعادة تسمية تلك الملفات لو تلاحظ انو الحماية ما منعت هاذين الملفين .

  10. #10
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    اقتباس المشاركة الأصلية كتبت بواسطة عبد الواحد البشيري مشاهدة المشاركة
    ويستحق التثبيت
    شكرا لك أخى الكريم عبد الواحد

  11. #11
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    اقتباس المشاركة الأصلية كتبت بواسطة samy90 مشاهدة المشاركة

    شكراااا وكنت قد قرات الموضوع من قبل
    لو تلاحظ ان التحقق
    يتم فقط من امتداد الملف فيمكن في هذه الحالة اعادة تسمية الملف من file.php
    الى file.jpeg ورفعه من دون ان يشتغل وهذا خطا يجب عدم السماح للملف اصلا من الرفع لان محتوه ليس صورة
    الى الان وجدت بعض مراكز التحميل لاتقبل الرفع اصلا اذا تم خداعها بهذه الخدعة والبعض يقبل الملف بس مايشتغل بس يستعرض بصورة
    يمكننا رفع ملف php.ini او .htaccess يقوم باعادة تسمية تلك الملفات لو تلاحظ انو الحماية ما منعت هاذين الملفين .
    راجع الموضوع مرة أخرى فالملف لم يدخل مركز الرفع نهائيا

    و هذان النوعان من الملفات أيضا لن تتمكن من رفعهما

    إقرء الموضوع بتمعن و تفحص أكثر

    و كما أخبرت من البدايه

    لا تتعجل و تقفز فوق النقاط

  12. #12
    مشرف الصورة الرمزية عبد الواحد البشيري
    تاريخ التسجيل
    21-01-2007
    السن
    36
    المشاركات
    1,309
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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

  13. #13
    Webmaster
    "رب زدني علما"
    الصورة الرمزية يوسف الحمود
    تاريخ التسجيل
    24-12-2006
    المشاركات
    4,961
    معدل تقييم المستوى
    10

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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


    من استفاد من مواضيعي أو كتاباتي وأحب رد الجميل لي ... فليدعو لي بأن يرزقني الله من خيري الدنيا والآخرة وأن يفتح علي أبواب الرزق ...

    قوانين منتدى بي اتش بي

    Regulations Montada PHP




  14. #14
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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

    بارك الله فيكم أحبتى فى الله

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

  15. #15
    عضو مشارك الصورة الرمزية jafa34
    تاريخ التسجيل
    01-12-2012
    المشاركات
    82
    معدل تقييم المستوى
    5

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    ما شاء الله
    موضوع مفيد و متعوب عليه
    جزاك الله خير

  16. #16
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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

  17. #17
    عضو جديد
    تاريخ التسجيل
    17-02-2013
    المشاركات
    1
    معدل تقييم المستوى
    0

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    موضوع منوور و رووووعة

  18. #18
    عضو مشارك
    تاريخ التسجيل
    18-01-2013
    المشاركات
    65
    معدل تقييم المستوى
    5

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    شكرا جزيلا اخى الكريم موضوع فى غاية الروعة

  19. #19
    مشرف منتدى الـ jQuery الصورة الرمزية atefatwan
    تاريخ التسجيل
    06-07-2007
    المشاركات
    1,513
    معدل تقييم المستوى
    12

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

    اقتباس المشاركة الأصلية كتبت بواسطة Power Storm مشاهدة المشاركة
    موضوع منوور و رووووعة
    اقتباس المشاركة الأصلية كتبت بواسطة Ahmed Diab مشاهدة المشاركة
    شكرا جزيلا اخى الكريم موضوع فى غاية الروعة
    بارك الله فيكم إخوانى الكرام
    Ahmed Diab معجب بهذا .

  20. #20
    عضو فعال
    تاريخ التسجيل
    16-09-2012
    السن
    31
    المشاركات
    345
    معدل تقييم المستوى
    6

    افتراضي رد: شرح تأمين و حماية مواقع و سكربت رفع الملفات الى الموقع

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

صفحة 1 من 2 12 الأخيرةالأخيرة

معلومات الموضوع

الأعضاء الذين يشاهدون هذا الموضوع

الذين يشاهدون الموضوع الآن: 1 (0 من الأعضاء و 1 زائر)

المواضيع المتشابهه

  1. استفسار كيفية حماية الموقع من سبام
    بواسطة mohamedali في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 7
    آخر مشاركة: 23-01-2013, 03:14 PM
  2. استفسار حماية الموقع من الاختراق و sql injection
    بواسطة mr_eng_php في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 14
    آخر مشاركة: 28-12-2012, 07:13 PM
  3. حماية الملفات
    بواسطة زهرةالبرمجة في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 4
    آخر مشاركة: 24-02-2011, 12:03 AM
  4. سؤال : حماية مركز رفع الملفات
    بواسطة مريم في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 3
    آخر مشاركة: 10-06-2009, 05:48 PM
  5. استفسار حماية الملفات استفسار ضرورى
    بواسطة magoo_2003 في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 1
    آخر مشاركة: 25-06-2008, 04:05 AM

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

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