السلام عليكم ورحمة الله ،
تناقشت وصديقي العزيز Developer حول دالة تقوم بعملية التأكد من الملفات التي يتم تحميلها في المرفقات ، المهم بعد نقاش طويل قمت ببرمجة هذه الدالة والتي يتمحور عملها في ثلاث نقاط
الاولى : فحص امتدادات الملفات واذا كان الملف ممنوع تعيد false
الثانية : فحص نوع الملف ، فاذا كان صورة تفحص نوع الصورة واذا كان غير مسموح به تعيد false
الثالثة : اذا كان نوع الملف نصي تقوم بفحص محتويات الملف اذا كان يحتوي على tags ممنوعة تعيد
false واذا كان يخلو من ذلك كله تعيد true
الان الدالة :
كود PHP:
function filerFiles($_file, $mime_type, $allowed_images = array(), $allowed_other_extensions = array(), $prevent_tags = array())
{
if (!is_array($allowed_images) || count($allowed_images) == 0) {
return false;
}
if (!is_array($allowed_other_extensions) || count($allowed_other_extensions) == 0) {
return false;
}
if (!is_array($prevent_tags) || count($prevent_tags) == 0) {
return false;
}
$path = pathinfo($_file);
$allextensions = array_merge($allowed_images, $allowed_other_extensions);
// First check extension
if (!in_array($path['extension'], $allextensions)) {
return false;
}
// Second check mime type
// $mime_type = mime_content_type($_file);
$mime = explode('/', $mime_type);
if ($mime[0] == 'image') {
if (!in_array($mime[1], $allowed_images)) {
return false;
}
} elseif ($mime[0] == 'text') {
// Check file content
$file_content = file_get_contents($_file);
$risk = false;
foreach ($prevent_tags as $value)
{
if (strpos($file_content, $value) !== false) {
$risk = true;
break;
}
}
if ($risk) {
return false;
}
} else {
return true;
}
return true;
}
الدالة تحتوي على 5 parameters
الاول : ( _file ) الملف
الثاني : ( mime_type ) نوع الملف مثلا : image/gif او text/plain
الثالث : ( allowed_images ) مصفوفة بها انواع الصور المسموح بها مثل jpg, jpeg, gif, png
الرابع : ( allowed_other_extensions ) مصفوفة بها انواع الملفات الاخرى المسموح بها لكن لا نضع الصور هنا ، وتكون مثل zip, txt
الخامس : ( prevent_tags ) مصفوفة بها tags الممنوعة مثلا
كود PHP:
<?, <?php, ?>, dl(, system(, shell
بقي الان مثال على استخدام الدالة
كود PHP:
var_dump(filerFiles('./mypic.jpg', // file path
'image/jpeg', // mime type
array('jpeg', 'jpg'), // allowed images
array('zip', 'txt'), // allowed extensions
array('shell', '<?php', '?>', '<?'))); // prevent tags
والان ننتظر اقتراحاتكم و ارائكم