هر وب سایتی که به کاربران اجازه می دهد فایل های خود را آپلود کنند ممکن است مورد حمله هکرها قرار گیرد. خوشبختانه، کارهایی وجود دارد که می توانید برای ایمن سازی سایت خود انجام دهید.
ماژول های آپلود فایل یکی از ضعیف ترین لینک ها در برنامه های تحت وب هستند. هر گونه اشتباهی، حتی اشتباهاتی که شما آنها را کوچک می دانید، می تواند منجر به افتادن مستقیم کنترل سرور به دست مهاجمان سایبری شود. به همین دلیل، توسعه دهندگان نرم افزار باید رایج ترین اشتباهات و برخی روش های حمله ای را که ممکن است رخ دهد، بدانند.
بنابراین دستکاری سمت مشتری چیست؟ چگونه می توانید با این امر مبارزه کنید تا سایت های خود و کاربران خود را ایمن نگه دارید؟
دستکاری سمت مشتری چیست؟
دستکاری سمت مشتری مفهوم اصلی حملات برنامه های وب به عنوان یک کل است. به عبارت ساده، به این معنی است که دیگر نمی توانید به هیچ یک از داده هایی که برای کاربر ارسال می کنید اعتماد کنید. علاوه بر این، دستکاری سمت مشتری یکی از پایه های توسعه برنامه های کاربردی امن است. اگر ماژول آپلود فایلی که با آن سروکار دارید را بررسی کنید و دستکاری سمت مشتری را در نظر بگیرید، داده هایی که نمی توانید به آنها اعتماد کنید شامل موارد زیر است:
- نام فایل آپلود شده
- نوع محتوا فایل آپلود شده
این دو مورد جایی است که شما این فرصت را دارید که به عنوان یک توسعه دهنده نرم افزار در لیست سفید قرار بگیرید. داده های نام فایل آپلود شده می تواند حاوی هر چیزی با دستکاری سمت مشتری باشد. با داده های Content-Type فایل آپلود شده، حتی اگر مهاجم در حال آپلود یک فایل exe. باشد، این فایل ممکن است به صورت یک تصویر/jpeg در سیستم ظاهر شود.
پسوند فایل و لیست سفید
در حین توسعه ماژول های آپلود فایل، اولین کاری که باید انجام دهید فرآیند لیست سفید برای پسوند فایل است. به عنوان مثال، کاربر می خواهد فایلی به نام “muo.jpeg” را آپلود کند. باید مطمئن شوید که پسوند فایلی که کاربر می خواهد آپلود کند .jpeg باشد. برای این کار، سیستم باید فایل آپلود شده را بررسی کند و ببیند آیا یکی از پسوندهای مجاز فایل است یا خیر. برای درک اینکه چگونه می توانید این کار را انجام دهید، کد PHP ساده زیر را بررسی کنید:
$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
break;
case "bat": // Or exe, dll, so, etc.
break;
case "":
case NULL: // No file extension
break;
}
شما می توانید این کار را با یک بلوک کد مشابه با بلوک بالا انجام دهید، یا می توانید از کلاس ها و توابع ارائه شده توسط فریمورک مورد استفاده خود استفاده کنید.
مراقب باشید که با تجزیه نام فایل بر اساس کاراکتر نقطه (.) داده های پسوند فایل ایجاد نکنید، زیرا مهاجم می تواند این مرحله بررسی را با نام فایلی مانند “muo.jpeg.php” دور بزند.
اطلاعات نوع محتوا چیست؟
اطلاعات نوع محتوا بخشی از اطلاعات است که در درخواست HTTP برای هر بارگذاری فایل ارسال می شود. مرورگر اینترنت این اطلاعات را شناسایی کرده و به درخواست ارسال شده اضافه می کند. مهاجم می تواند سعی کند اطلاعات را با دستکاری سمت کلاینت تغییر دهد و اعتبارسنجی سمت سرور را دور بزند. در این مرحله، توسعهدهندگان به یک مکانیسم کنترلی برای اعتبارسنجی اطلاعات Content-Type نیاز دارند. این به تنهایی کافی نخواهد بود. هنوز، این یک موضوع مهم برای توسعه دهندگان است که باید به آن توجه کنند.
فرض کنید مکانیزمی را برای بررسی صحیح پسوند فایل کدگذاری می کنید و فقط فایل هایی با پسوند jpeg. می پذیرید. علاوه بر این مکانیسم احتیاطی، میتوانید اطلاعات نوع محتوا را در هر صورت بررسی کنید و فقط فایلهایی را با اطلاعات تصویر/jpeg بپذیرید، سطح حفاظتی اضافی در برابر حملات سایبری.
فایل های فلش SWF و مراحل حمله
پسوند فایل و دادههای Content-Type برای مرورگرهای اینترنتی که از افزونههایی مانند Adobe Flash Player پشتیبانی میکنند، معنی ندارد. اگرچه پشتیبانی از آن پخشکننده دیگر در دسترس نیست، اما همچنان میتوان آن فایلهای مرتبط را در بسیاری از سیستمها نصب کرد، حتی اگر Flash همچنان یک خطر امنیتی است. در سیستمی که اقدامات احتیاطی مربوطه را انجام نداده است، می توان یک فایل فلش را با تگ