علیرضا
5 سال پیش توسط علیرضا مطرح شد
10 پاسخ

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

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


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@paressep28

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

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

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


Davood
تخصص : PHP - Laravel
@dfardabasi 5 سال پیش مطرح شد
0

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

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

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


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@paressep28

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


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

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


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

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

'photo' => 'mimes:jpeg,bmp,png'

Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش آپدیت شد
1

سلام مجدد
@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);

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


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

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


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

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


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@paressep28

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

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


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش آپدیت شد
0

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


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@paressep28

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

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

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام