/
  • كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!

  • صفحه‌ها (2):
  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    نویسنده پیام
    mehdimalek آفلاین
    عضو جدید
    **

    ارسال‌ها: 49
    تاریخ عضویت: ۱۳۸۸ مهر ۱۲
    اعتبار: 0
    تشکرها : 54
    ( 10 تشکر در 6 ارسال )
    ارسال: #1
    كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    با سلام اين كد رو خودم نوشتم و روي سرور خانگي كار كرده اما هنوز روي يه سرور واقعي امتحانش نكردم وفقط براي آپلود 2 نوع فايل با پسوند js , css هست و ماكزيمم حجم فايل هم 100 كيلو بايت هست.
    برنامه كار ميكنه و ازش راضي هستم اما چيزي كه منو نگران ميكنه نواقص امنيتيش هست.
    از اساتيدي كه اينجا حضور دارن خواهش مي كنم در مورد نواقص برنامه و اينكه كجاهاش اضافي و بدرد نخوره و چه چيز اساسي كم داره و مخصوصا در مورد نقصهاي امنيتيش توضيح بدهند و منو راهنمايي كنن!
    ---------------
    فرم آپلود:
    کد:
    <form name="UPLOAD_FORM" action="uploader.php" method="post" enctype="multipart/form-data" id="OPLOAD_FORM">
    <input type="file" name="THE_FILE" id="THE_FILE" size="50" /><br/>
    <input type="submit" name="SUBMIT" id="SUBMIT" value="Upload" />
    </form>
    uploader.php:
    کد:
    <?php
    $HRL="http://localhost/upload_example/";
    $MAX_SIZE=100000;
    //***********
    if((!isset($_SERVER['HTTP_REFERER']))or empty($_SERVER['HTTP_REFERER'])){
    die("ERROR (1)");
    }
    //***********
    $REFERER=strtok($_SERVER['HTTP_REFERER'],"?");
    //***********
    if(($REFERER!=$HRL)and($REFERER!=$HRL."index.html")){
    die("ERROR (2)");
    }
    //***********
    if($_SERVER['REQUEST_METHOD']!="POST"){
    die("ERROR (3)");
    }
    //***********
    if((count($_REQUEST)!=1)or(count($_POST)!=1)or(count($_FILES)!=1)){
    die("ERROR (4)");
    }
    //***********
    if((!isset($_FILES['THE_FILE']))or(!isset($_POST['SUBMIT']))or(!isset($_REQUEST['SUBMIT']))){
    die("ERROR (5)");
    }
    //***********
    if(empty($_FILES['THE_FILE'])or empty($_POST['SUBMIT'])or empty($_REQUEST['SUBMIT'])){
    die("ERROR (6)");
    }
    //***********
    if(($_POST['SUBMIT']!="Upload")or($_REQUEST['SUBMIT']!="Upload")){
    die("ERROR (7)");
    }
    //***********
    if($_FILES['THE_FILE']['size']>$MAX_SIZE){
    die("ERROR (8)");
    }elseif($_FILES['THE_FILE']['size']==0){
    die("ERROR (9)");
    }
    //***********
    $FILE_NAME=$_FILES['THE_FILE']['name'];
    $pl=explode(".",$FILE_NAME);
    $tp=count($pl);
    if($tp==1){
    die("ERROR (10)");
    }elseif(($pl[$tp-1]!="js")and($pl[$tp-1]!="css")){
    die("ERROR (11)");
    }
    //***********
    if(!is_dir("./uploads")){
    if(!mkdir("./uploads",0644)){
      die("ERROR (12)");
    }
    }
    //***********
    $NEWNAME="upl".chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).rand(1000,9999).chr(rand(​97,122)).rand(1000,9999).chr(rand(97,122)).rand(100,999).".".$pl[$tp-1];
    if(file_exists("uploads/".$NEWNAME)){
    while(file_exists("uploads/".$NEWNAME)){
      $NEWNAME="upl".chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).rand(1000,9999).chr(rand(​97,122)).rand(1000,9999).chr(rand(97,122)).rand(100,999).".".$pl[$tp-1];
    }
    }
    //***********
    if(!is_uploaded_file($_FILES['THE_FILE']['tmp_name'])){
    die("ERROR (13)");
    }
    //***********
    if(!move_uploaded_file($_FILES['THE_FILE']['tmp_name'],"./uploads/".$NEWNAME)){
    die("ERROR (14)");
    }
    //***********
    if(!chmod("./uploads/".$NEWNAME,0644)){
    die("ERROR (15)");
    }
    //***********
    echo"<font face=\"Tahoma\" style=\"font-size: 15pt\" color=\"#008000\"><b>Successful upload!</b></font>\n";
    echo"<p><font face=\"Verdana\" size=\"2\" color=\"#703700\">Your file address:</font><br>";
    echo"<input type=\"text\" name=\"ADDRESS\" id=\"ADDRESS\" size=\"70\" value=\"".$HRL."uploads/".$NEWNAME."\" style=\"color: #9EF068; font-family: Tahoma; font-size: 10pt; border: 1px solid #182C14; background-color: #518A42\" /></p>";
    echo"<hr color=\"#96B086\" size=\"5\" />";
    echo"<a href=\"index.html\">Back</a>";
    ?>

    دوستان اگه دير به نظرهاتون جواب دادم يا در مورد برنامه توضيح بيشتري ندادم ببخشيد چون از شهرستانم و اين سرعت ما فوق تصور اينترنت همراه هزينه مباركش منو كفري كرده!
    تشكر!
    ۱۳۸۸ آذر ۱۰ ۰۹:۲۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : oia
    pesarelor آفلاین
    عضو جدید
    **

    ارسال‌ها: 24
    تاریخ عضویت: ۱۳۸۸ مهر ۲۶
    اعتبار: 0
    تشکرها : 5
    ( 9 تشکر در 3 ارسال )
    ارسال: #2
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    Big Grin اگه بهتون گفته بشه میشه از همه این شرط ها عبور کرد چه حالی بهتون دست میده.
    هیچ وقت از رفرر تو شرط ها استفاده نکنید چون قابل تغییر هست.
    کافیه فرم شما رو طرفی که میخواد سایت رو هک کنه داشته باشه.
    خود به خود شما همه داده ها رو بهشون دادید و شما هم صحت همون داده ها رو چک میکنیدExclamationکه این کار خطرناکه.
    حالا درسته اگه تو قسمت مدیریت استفاده بشه فقط مدیر بهش دسترسی داره ولی خب اگه شما فکر کنید تا امروز کسی این کد رو هک نکرد(هیچ مدیری سایت خودش رو هک نمیکنه)پس تو سیستم بعد برا قسمت ارسال مقاله کاربر همراه با عکس ازش استفاده میکنم اونجاست که هک میشید.
    بهترین راه استفاده از کد امنیتی هست برا مواردی که آپلود فایل دارید و مهم تر اینکه کاربر ناشناس هم طرف حساب شما باشه.
    فکر کنم یه مورد قبلا آپلود فایل تو انجمن دیده باشم یه سرچ بزنید

    برا این میگم هک چون مثلا شما یه فایل test.js رو هاست دارید که تو سایت اجرا میشه کافیه طرف هکر یه فایل با همین نام و محتوای document.write('this site hacked'); آپلود کنه اونوقت ایندکس شما همین پیعام رو میده
    __________________________________________________________________________
    طراحی و برنامه نویسی صفحات پویا - Iranveb.net
    پورتال جدیدترین اخبار داخل و خارج کشور - Iranveb.com
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آذر ۱۰ ۱۱:۴۹ عصر، توسط pesarelor.)
    ۱۳۸۸ آذر ۱۰ ۱۱:۴۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #3
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    کدت مشکلی نداره فقط به حتما MimeType فایل رو بررسی کن کن که همون فایلهایی باشه که می خوایی
    ۱۳۸۸ آذر ۱۱ ۰۱:۰۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    mehdimalek آفلاین
    عضو جدید
    **

    ارسال‌ها: 49
    تاریخ عضویت: ۱۳۸۸ مهر ۱۲
    اعتبار: 0
    تشکرها : 54
    ( 10 تشکر در 6 ارسال )
    ارسال: #4
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    ConfusedUndecidedSadSad
    تمام موهاي بدنم سيخ شد كه!
    من از رفرر براي اين استفاده كردم كه فقط و فقط از صفحه اي كه گذاشتم آپلود صورت بگيره و نه از جاي ديگه!
    جناب pesarelor يه كم پايين سيكل برام شرح بده كه چه سوتي هايي در اين آپلودر مادر مرده دادم كه خودم بي خبرم!
    بيچاره شدم كه حالا ناز توجهت بگو چه چيزي اضافه كنم تا يه چيز درستي از آب در بياد اون سرچي هم كه گفتي ميزنم تا ببينم چيكار بايد بكنم.
    بدبخت شدم ... ببينيد اين سايت اينطوريه كه مثل آپلودر هاي فايل ميمونه! و هركسي آپلود كرد لينك مستقيم فايلش بهش داده ميشه و خلاص! بابا يه راهنمايي كنيد كه مثلا چه جوري اين كد كار دستم ميده و بگيد چيكار كنم!
    ممنونتم جناب pesarelor
    Sad
    ۱۳۸۸ آذر ۱۱ ۰۱:۰۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #5
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    نه نگران نباشید این کار امنیت سایت رو پایین نیاورده
    اتفاقا خوب کاری کردید از reffer استفاده کردید
    ۱۳۸۸ آذر ۱۱ ۰۱:۱۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    mehdimalek آفلاین
    عضو جدید
    **

    ارسال‌ها: 49
    تاریخ عضویت: ۱۳۸۸ مهر ۱۲
    اعتبار: 0
    تشکرها : 54
    ( 10 تشکر در 6 ارسال )
    ارسال: #6
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    HeartHeartHeart
    آخيش نزديك سكته سوم به دادم رسيديد! احيا شدم ...
    Smile
    مرسي
    ۱۳۸۸ آذر ۱۱ ۰۱:۱۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #7
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    فقط همون mimetype رو‌ حتما بررسی کنید
    ۱۳۸۸ آذر ۱۱ ۰۱:۲۵ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #8
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    باید با یک برنامه کار کرد تا بشه نظر داد
    البته چیزی که از کدهات برداشت می شه بنظر میاد که کد مطمئنی باشه
    البته جا برای یه کاره بهتر هنوز هست.
    استفاده از پایگاه داده می تونه به مراتب به برنامت کمک کنه تا بتونه از نظر امنیت بهتر جواب بده و هم گاره قشنگتری از کار دربیاد. البته این بسته به این داره که قراره با این برنامه چی کار کنی. شاید هدف تولید این نرم فزار بیشتر از این نیاز به کار نداره!. فقط وقتی رفتین رو سرور انلاین حق دسترسی پوشه upload رو یادتئن نره Sleepy Wink

    نقل قول: هیچ وقت از رفرر تو شرط ها استفاده نکنید چون قابل تغییر هست.
    کافیه فرم شما رو طرفی که میخواد سایت رو هک کنه داشته باشه.
    خود به خود شما همه داده ها رو بهشون دادید و شما هم صحت همون داده ها رو چک میکنیدExclamationکه این کار خطرناکه.
    Huh Blush

    نقل قول: برا این میگم هک چون مثلا شما یه فایل test.js رو هاست دارید که تو سایت اجرا میشه کافیه طرف هکر یه فایل با همین نام و محتوای document.write('this site hacked'); آپلود کنه اونوقت ایندکس شما همین پیعام رو میده
    اگه شما نگاهی به کد بندازید می بینید که تقریبا غیر ممکنه!
    ۱۳۸۸ آذر ۱۱ ۰۱:۵۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    aligilani1986 آفلاین
    Hyp3r
    ***

    ارسال‌ها: 119
    تاریخ عضویت: ۱۳۸۷ دي ۱
    اعتبار: 2
    تشکرها : 136
    ( 90 تشکر در 47 ارسال )
    ارسال: #9
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    سلام.

    بهتر بود width,height رو هم چک میکردی.

    چون اونوقت فایل php رو با پسوند jpg رو میشه آپلود کرد.

    کد PHP:
    list($width,$height,$type,$attr)=getimagesize($_FILES["picpath"]["tmp_name"]); 
    __________________________________________________________________________
    www.shoo.ir
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آذر ۱۱ ۰۴:۴۱ عصر، توسط aligilani1986.)
    ۱۳۸۸ آذر ۱۱ ۰۳:۴۰ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #10
    RE: كد آپلود كه خودم نوشتم! لطفا نظر بدهيد!
    علی جان فایل های سی اس اس و جاوااسکریپت که طول و عرض ندارن. تازه mimetype ‌به‌همین درد می خوره. در ضمن فایل php با‌پسوند jpg هم آپلود بشه روی سرور اصلا اجرا نمیشه
    ۱۳۸۸ آذر ۱۱ ۰۴:۲۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : mehdimalek
    « قدیمی تر | تازه‌ تر »

  • صفحه‌ها (2):
  • ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS