راکت
حل شده

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

10 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

10
Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

بهترین پاسخ

سلام
@paressep28

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

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

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

Davood
Davood
@dfardabasi

تخصص: PHP - Laravel

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

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

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

Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@paressep28

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

شاید پاسخ شما همین‌جا باشد

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

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

Mohamad Hoseini
Mohamad Hoseini
@mcpu.cc

تخصص: برنامه نویسی - داده کاوی

<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>

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

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

تخصص: کانفیگ سرور و برنامه نویس

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

تخصص: فرانت اند وب

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

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

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

Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@paressep28

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

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

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

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

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

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