جلوگیری از آپلود shell

- 4 روز پیش
توسط علیرضا آپدیت شد
علیرضا ( 4970 تجربه )
5 روز پیش
تخصص : بیکار

سلام ودوستان میشه چند روش رو بصورت تکمیلی برای جلوگیری از آپلود شل معرفی کنین کهبتونه میزان نفوذ رو به ۱ درصد برسونه؟

بهترین پاسخ انتخاب شده توسط علیرضا
Alimotreb
4 روز پیش

سلام
@paressep28

یه تست بگیرید ران کنید کد رو متوجه میشید

            $file_ext               = substr($filename, strripos($filename, '.')); // get file name

2 تابع درون هم صدا زده شده!

KING_PHP ( 8110 تجربه )
5 روز پیش
تخصص : برنامه نویس PHP

یکی از نکاتی که خیلی میتونه کمکتون کنه که اون فایل ارسالی رو با mime type چک بکنید نه پسوندش

یعنی مثلا اگر فایل ارسالی jpg بود شما با image/jpg چک کن

در این صورت اگه کسی فایل مخربی رو آپلود بکنه به هیچ عنوان اجازه آپلود نمیده

Alimotreb ( 127552 تجربه )
5 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

طی 3 فرایند باید این کار انجام بشه
1) اول اینکه پسوند های مجاز رو توی اسکپریت ولیدیشن کنید که اصلا نتونه آپلود کنه!
2) سمت سرور آنتی شلر های معروف مثل CXS رو نصب کنید که اگرم آپلود شد حذف کنه
3) توابع امنیتی توی PHP باید از سمت سرور حتما و حتما بسته بشه ، که اگرم آپلود شد اجازه اجرا به اینگونه شل ها ندن
که اکثر این شل ها با توابع خطرناک PHP اجرا میشن.

علیرضا ( 4970 تجربه )
5 روز پیش
تخصص : بیکار

@dfardabasi
ببخشید میشه درمورد mime type توضیح بدین؟و تکه کدی بدین من متوجه بشم؟

Mohamad Hoseini ( 5600 تجربه )
5 روز پیش
تخصص : برنامه نویسی - داده کاوی
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>

داخل لاراول هم که با validation ها به صورت زیر میتونید چک کنید. مثلا برای چک کردن تصویر :

'photo' => 'mimes:jpeg,bmp,png'
Alimotreb ( 127552 تجربه )
5 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام مجدد
@paressep28

اینم یه نمونه کد برای PHP خام ، چون شما حس میکنم MVC کار هستید و از فریم ورک ها مثل لاراول کم استفاده میکنید و پی اچ پی خام بیشتر کد میزنید
:-)
( اینو از گفتگو ها متوجه شدم)

    $allowed_file_types     = array('.png','.gif','.jpg');  
           $file_size               = 2048;     
$upload_dir             = "../files/documents/";
            $filename               = $_FILES["file"]["name"];
            $file_basename          = substr($filename, 0, strripos($filename, '.')); // get file extention
            $file_ext               = substr($filename, strripos($filename, '.')); // get file name
            $filesize               = $_FILES["file"]["size"];

            if ((in_array($file_ext,$allowed_file_types) && ($filesize < $file_size * 1000)) || empty($filename)) {
                // Rename file
                $newfilename = md5(time()) . $file_ext;

                move_uploaded_file($_FILES["file"]["tmp_name"], $upload_dir . "/files/" . $newfilename);

خیلی ساده محدودیت حجمی هم میتونید قرار بدید

علیرضا ( 4970 تجربه )
4 روز پیش
تخصص : بیکار

@Alimotreb
خیلی ممنونم از شما
اره خودم سرخود MVC رو شروع کردم بخاطرهمین چون چیزی بلد نبوم سئوال میپرسیدم:)
بگذریم
وقلی اگر کاربر اینطور عمل کرد چی؟
test.php.jpeg

علیرضا ( 4970 تجربه )
4 روز پیش
تخصص : بیکار

@mcpu.cc
خیلی ممنونم.
این تابعی که فرستادید ورودی چی میگیره دقیقا؟ 0و1 برگشت میده؟

Alimotreb ( 127552 تجربه )
4 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

توی نمونه کد من خودتون میتونید تست بگیرید خروجی رو ببینید از اولین . به بعد میگیره!
و کلا تو هر حالتی اگر جز موارد توی آرایه نباشه آپلود نمیشه!

توی لاراول اون چیزی که دوستمون راهنمایی کرد ، عملیاتی داریم تحت ولیدیشن
موارد ورودی از کاربر رو میسنجیم، حجمش ، پسوندش ، نوعش و ..... خیلی موارد دیگه!!
اگر اوکی بود که ادامه روند کد میره جلو
اگر نبود ارور رو برمیگردونیم!

علیرضا ( 4970 تجربه )
4 روز پیش
تخصص : بیکار

@Alimotreb
درود بر شما بزرگوار!!
کامل ندیدم و اشتباه کردم.معذرت میخام ولی تو کدی که شما فرستادید بطور پیشفرض وقت کاربر خوب عکسی وارد میکنه ممکنه یه نقطه وسط اسم عکسش باشه:) و کاربر خوووب گیر میفته.
بصورت کلی میشه اینطور عمل کرد؟؟(از نظر من البته)
اسم فایل رو میگیریم و بر حسب نقطه به دو قسمت explode می کنیم و قسمت دوم explode شده رو implode می کنیم و توش جستجو می کنیم اگه چنین چیزی وجود داشت فالس برگردونه
.py .php و... یا ....
خیلی پیچیده شد:)
mime_content_type('php.gif')
ببخشید این تابع چه پارامتری باید بگیره؟ و چه چیزی رو برگشت میده؟

Alimotreb ( 127552 تجربه )
4 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

یه تست بگیرید ران کنید کد رو متوجه میشید

            $file_ext               = substr($filename, strripos($filename, '.')); // get file name

2 تابع درون هم صدا زده شده!

برای ارسال پاسخ باید وارد سایت شوید