سلام . در این پست آموزشی میخوام بصورت ساده و تیتر وار به نکاتی اشاره کنم که با استفاده از اونها امنیت اسکریپت خودتون رو بالا ببرید.
1- فقط به کاربران عضو اجازه آپلود فایل رو بدید. شما میتونید از کد کپتچا هم برای جلوگیری از کارهای مخرب بات ها استفاده کنید.
2- اول از همه در فرم آپلودتون مقادیر MAX_FILE_SIZE ٬ upload_max_filesize و max_file_uploads رو محدود کنید:
ini_set('post_max_size', '40M');
ini_set('upload_max_filesize', '40M');
ini_set('max_file_uploads', 10);
با استفاده از کد زیر هم میتونید حجم فایل رو چک کنید:if ($fileInput['size'] > $sizeLimit)
3- با استفاده از تابع move_uploaded_file() فایل آپلود شده رو به مکان مناسبی از سرور انتقال بدید و همچنین بوسیله تابع is_uploaded_file() از انتقال فایلها مطمئن بشید.
4- هیچوقت فایل رو با نام اصلی خودش در سرور ذخیره نکنید. میتونید با استفاده توابع تولید رشته یا عدد تصادفی نام فایل رو عوض کرده و بعد ذخیره کنید.
$uploadStoragePath = '/file_storage';
$fileInput = $_FILES['image'];
if (fileInput['error'] != UPLOAD_ERR_OK)
; //handle upload error here
$temporaryName = $fileInput['tmp_name'];
$extension = pathinfo($fileInput['name'], PATHINFO_EXTENSION);
$name = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); //true random id
move_uploaded_file($temporaryName, $uploadStoragePath.'/'.$name.'.'.$extension);
5- فایلهای آپلود شده رو به فولدری بیرون از public_html انتقال بدید. این کار باعث میشه تا هیچ فایلی قابلیت اجرا شدن رو نداشته باشه. همچنین با استفاده از فایل htaccess. میتونید از اجرا شدن فایلهای php جلوگیری کنید:
SetHandler none
SetHandler default-handler
Options -ExecCGI
php_flag engine off
فایل htaccess. رو باید داخل فولدر آپلود قرار بدید.
6- شما باید نوع فایلهایی که توسط کاربر(که میتونه یک هکر باشه) آپلود میشه رو قبل از ذخیره چک کنید. به مثال زیر توجه کنید:
// FILEINFO_MIME set to return MIME types, will return string of info otherwise
$fileinfo = new finfo(FILEINFO_MIME);
$file = $fileinfo->file($_FILE['filename']);
$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue
7- میتونید از یک انتی ویروس برای پیدا کردن فایلهای آلوده استفاده کنید.
8- برای حصول اطمینان از آلوده نبون تصاویر میتونید از Imagick یا GD استفاده کنید:
مثالی از Imagick:
try {
$uploadedImage = new Imagick($uploadedFile);
$attributes = $uploadedImage->identifyImage();
$format = $image->getImageFormat();
var_dump($attributes, $format);
} catch (ImagickException $exception) {
//handle damaged or corrupted images
}
- اگر شما هم راه دیگری برای افزایش امنیت اسکریپت آپلود دارید پیغام بدید تا اضافه بشه.