رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آپلود عکس با فرمت GIF و با امنیت
#1
سلام
من از کتابخانه ی gd برای آپلود امن استفاده کردم. ولی فایل gif را وقتی آپلود میکنه از حالت متحرک بودنش خارج میشه.
<form enctype="multipart/form-data" method="post">
<input type="file" name="photo"/>
<input type="submit" value="ارسال"/>
</form><br/>

<?php
if(isset($_FILES['photo']['name']) && $_FILES['photo']['error'] == 0) {
    $photo = &$_FILES['photo'];
    switch(strtolower($photo['type'])) {
    case 'image/gif':
        $src = ImageCreateFromGIF($photo['tmp_name']);
        break;
    case 'image/jpeg':
        $src = ImageCreateFromJPEG($photo['tmp_name']);
        break;
    case 'image/png':
        $src = ImageCreateFromPNG($photo['tmp_name']);
        ImageAlphaBlending($src, false);
        ImageSaveAlpha($src, true);
        break;
    case 'image/bmp':
        $src = ImageCreateFromWBMP($photo['tmp_name']);
        break;
    default:
        exit();
        break;
    }
$dst = ImageCreateTrueColor(ImageSX($src), ImageSY($src));
$white = ImageColorAllocate($dst,  255, 255, 255);
ImageFilledRectangle($dst, 0, 0, ImageSX($src), ImageSY($src), $white);
ImageCopyResampled($dst, $src, 0, 0, 0, 0, ImageSX($src), ImageSY($src), ImageSX($src), ImageSY($src));
ImageJPEG($dst, 'upload/' . substr($photo['name'], 0, strrpos($photo['name'], '.')) . '.jpg', 100);
ImageDestroy($dst);
ImageDestroy($src);
}
?>
پاسخ
تشکر شده توسط:
#2
در حال حاضر GD امکان تولید GIF متحرک نداره. باید از ImageMagick استفاده کنید.
پاسخ
تشکر شده توسط: راوندی
#3
یه نمونه مثال دارید ؟
متشکرم.
پاسخ
تشکر شده توسط:
#4
این دستور رو زدم:
<?php
echo phpinfo();
?>
دیدم از ImageMagick پشتیبانی نمیکنه. اصلا همچین چیزی توش نبود.
برنامه همچین اخطاری بهم میده:
کد:
Fatal error: Class 'Imagick' not found in
نسخه ای که استفاده میکنم:
کد:
PHP Version 5.6.8
باید چکار کرد؟
پاسخ
تشکر شده توسط:
#5
سلام ، فکر می کنم باید ImageMagick version 6.3.5 یا نسخه های بالاتر رو نصب کنید ، توضیحات این لینک رو مطالعه بفرمایین
http://www.magickwand.org

پ ن : اگر موفق شدین استفاده کنین ، یه نمونه ساده و کامل اینجا بنویسید تا منم استفاده کنم d:
پاسخ
تشکر شده توسط: راوندی
#6
آموزش نصبش رو اینجا هم گذاشته:
http://www.elxsy.com/2009/07/installing-...p-imagick/
ولی خب اینو که روی هاست سایتم که نمیتونم نصبش کنم که. سرور مجازی نمیخواد؟
لطفا یه پیشنهاد دیگه بدید.
ممنونم
پاسخ
تشکر شده توسط:
#7
به نظرتون اگه من پسوند و نام عکس رو عوض کنم و از htaccess هم استفاده کنم . امنیتش برقرار میشه؟
پاسخ
تشکر شده توسط:
#8
ممکنه توی عکس کد Inject شده باشه. البته خیلی هم نمیشه رو این موارد حساس شد ولی من شخصاً ترجیح میدم توی بحث امنیت، روزه شک دار نگیرم.
پاسخ
تشکر شده توسط: راوندی
#9
من یه فکری کردم به نظرتون میشه وقتی فایل میخواد آپلود بشه یه شرطی بذاریم و داخل عکس رو بررسی کنیم و بگیم اگه داخل این فایل دستور <?Php وجود داشت فایل آپلود نشه؟
چطوره؟
پاسخ
تشکر شده توسط:
#10
راستی وقتی با htaccess کاری کنیم که فایل عکس قابل اجرا نباشه هکر چطوری میتونه فایل رو اجرا کنه و هک کنه؟
پاسخ
تشکر شده توسط:
#11
همیشه کدها PHP نیستن. ممکنه اسمبلی یا حتی باینری و هگزادسیمال باشن. htaccess. فقط برای Apache معنا داره نه برای سیستم عامل.
پاسخ
تشکر شده توسط: راوندی
#12
نقل قول:htaccess. فقط برای Apache معنا داره نه برای سیستم عامل.
این حرفتون رو متوجه نشدم. من الان عکس هایی که داخل پوشه دارم رو وقتی به ادرسش میرم و اون عکس رو اجرا میکنم. عکس به جای اجرا دانلود میشه. بازم به نظرتون مشکلی پیش میاد؟
نمیشه رنگ عکس رو با GD گرفت که فهمید عکس هست یا نه؟
پاسخ
تشکر شده توسط:
#13
توی Code Injection مشکلی توی عکس در ظاهر پیش نمیاد و گرفتن رنگ عکس هم بدون مشکل انجام میشه. منظورم از اون صحبت هم این بود که htaccess. فقط توی درخواستهای وب بدرد میخوره. ممکنه هکر روی سرور شما یه هاست بخره و بعد از آپلود کردن شل خودش، درصورتی که سرور به خوبی کانفیگ نشده باشه، شل رو با دستورات سیستم عامل بطور مستقیم و بدون واسطه Apache اجرا کنه.
پاسخ
تشکر شده توسط: راوندی
#14
پس نتیجه میگیریم که نمیشه امنیت رو برقرار کرد Big Grin
پاسخ
تشکر شده توسط:
#15
اگه عکس رو با GD یا ImageMagick از روی فایل موقت آپلودشده دوباره بسازین و مجوز اجرا رو هم از پوشه موقت و پوشه ای که عکسها آپلود میشه بگیرین، میشه امنیت رو تا حد زیادی برقرار کرد (کدهای Inject شده حذف میشن) ولی هیچوقت، امنیت 100٪ نیست.
پاسخ
تشکر شده توسط:




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