• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
علت استفاده از این کد در این آموزش؟!
#1
سلام.امروز داتم یه مثال ساده از آپلود کردن ها توی php میخوندم(از سایت w3school)
کد زیرر رو ببنید!
کد پی‌اچ‌پی:
<?php
$allowedExts 
= array("gif""jpeg""jpg""png");
$temp explode("."$_FILES["file"]["name"]);
$extension end($temp);

if (((
$_FILES["file"]["type"] == "image/gif")
|| (
$_FILES["file"]["type"] == "image/jpeg")
|| (
$_FILES["file"]["type"] == "image/jpg")
|| (
$_FILES["file"]["type"] == "image/pjpeg")
|| (
$_FILES["file"]["type"] == "image/x-png")
|| (
$_FILES["file"]["type"] == "image/png"))
&& (
$_FILES["file"]["size"] < 20000)
&& 
in_array($extension$allowedExts)) {
  if (
$_FILES["file"]["error"] > 0) {
    echo 
"Error: " $_FILES["file"]["error"] . "<br>";
  } else {
    echo 
"Upload: " $_FILES["file"]["name"] . "<br>";
    echo 
"Type: " $_FILES["file"]["type"] . "<br>";
    echo 
"Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo 
"Stored in: " $_FILES["file"]["tmp_name"];
  }
} else {
  echo 
"Invalid file";
}
?>

کارش اینه که اگر فرمت عکس بود و حجمش کمتر از 20k آپلودش کنه! همه چی درسته مگر توی شرط if که یه دور با استفاده از FILES_$ تیپ فایل رو چک میکنه یه دور هم با string فرمت فایل بعد از ( . ) !
چرا؟؟؟؟
  پاسخ
تشکر شده توسط :
#2
ممکنه type فایل با فرمت فایل یکی نباشه
  پاسخ
تشکر شده توسط : Mob1n
#3
چند روز پیش یکی از بچه های بخش امنیت شرکت ازم خواست صرفا یه آپلودر ساده بهش بدم.برای کاری میخواست تست کنه. جلوی خودم توی یک دقیقه فایل PHP فرستاد. این وسط بعد از ارسال فرم و قبل از پردازشش توسط صفحه MimeType فایل رو به JPG تغییر داد و یه شل اسکریپت آپلود کرد و سایتو هک کرد.به همین سادگی به همین خوشمزگیBig Grin
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : Mob1n
#4
(۱۳۹۳ مرداد ۲۰, ۱۰:۱۷ ب.ظ)webnevesht نوشته: چند روز پیش یکی از بچه های بخش امنیت شرکت ازم خواست صرفا یه آپلودر ساده بهش بدم.برای کاری میخواست تست کنه. جلوی خودم توی یک دقیقه فایل PHP فرستاد. این وسط بعد از ارسال فرم و قبل از پردازشش توسط صفحه MimeType فایل رو به JPG تغییر داد و یه شل اسکریپت آپلود کرد و سایتو هک کرد.به همین سادگی به همین خوشمزگیBig Grin

مگه باز میشه؟منظورتون .jpg هست دیگه؟
و اینکه با این کد دیگه اون مشکل پیش نمیاد؟Idea
  پاسخ
تشکر شده توسط :
#5
بحث امنیت در ارسال فایل خیلی بحث گسترده ای هست. و این مثال فقط دو موردش رو چک کرده یکی mime-type و دیگری پسوند. اگه می خوای مفصل تر بدونی یکم زبان هم بلد باشی یه سرچ بزن با عنوان file injection security که اصطلاح فایل اینجکشن یا تزریق فایل عنوان روشی هست که از آپلودر فایل برای هک سایت استفاده می کنند. اگه سایتی که می خوای بنویسی خیلی مهم باشه باید بررسی فایلت خیلی قویتر از این ها باشه....Confused
  پاسخ
تشکر شده توسط :
#6
(۱۳۹۳ مرداد ۲۱, ۰۶:۲۱ ب.ظ)Mob1n نوشته: مگه باز میشه؟منظورتون .jpg هست دیگه؟
و اینکه با این کد دیگه اون مشکل پیش نمیاد؟Idea

نه پسوند فایل رو تغییر نداد.
اومد بین سیستم خودش و سرور یه پروکسی ایجاد کرد. وقتی فرم رو Submit کرد اطلاعات فرم رو توی یک نرم افزار دید . اطلاعات کاملی که همراه فرم ارسال شده. به طور مثال MimeType فایل رو که PHP بود.
در سمت سرور موقع آپلود فایل MimeTypeاش چک میشه که حتما تصویر باشه .
اون اومد MimeType رو تغییر داد و فایل PHP رو به عنوان یک تصویر به سرور جا زد - پسوند رو تغییر نداد ها-

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

توصیه امنیتی: توی مسیرهایی که فایل آپلود میشه حتما یه فایل htaccess بزارین که جلوی اجرای فایلهای اسکریپتی مثل PHP , perl, python , CGI و ... رو بگیره.Blush
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : Mob1n
#7
نقل قول:توصیه امنیتی: توی مسیرهایی که فایل آپلود میشه حتما یه فایل htaccess بزارین که جلوی اجرای فایلهای اسکریپتی مثل PHP , perl, python , CGI و ... رو بگیره
نقل قول:
کد:
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off
  پاسخ
تشکر شده توسط : webnevesht
#8
رضا به نظرت استفاده از این کد چطوره؟
کد پی‌اچ‌پی:
<Files "\.(php*|cgi|pl)$">
deny from all
</Files

من اینو توی روت پوشه Images گذاشتم کلا هر نوع فایل اسکریپتی که میدی بهش Forbiden میده Big Grin
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : Reza
#9
Big Grin

برای فایلهای آپلودی که کلا پوشه رو میبندم با http_download میفرستم واسه کاربر وقتی درخواست دانلود یک فایل رو داشت Cool
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان