လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Image_type_toxextensextension () ကိုအသုံးပြုသောအခါဖိုင်အမျိုးအစားကိုမစစ်ဆေးပါကမည်သည့်ပြ problems နာများပေါ်ပေါက်လာမည်နည်း။ အန္တရာယ်များကဘာတွေလဲ။

Image_type_toxextensextension () ကိုအသုံးပြုသောအခါဖိုင်အမျိုးအစားကိုမစစ်ဆေးပါကမည်သည့်ပြ problems နာများပေါ်ပေါက်လာမည်နည်း။ အန္တရာယ်များကဘာတွေလဲ။

M66 2025-06-23

ဖိုင်ပုံစံများကိုစစ်ဆေးခြင်းမပြုရ

1 ။ အတုဖိုင်အမျိုးအစားများတင်ပို့ခြင်းအတည်ပြုခြင်းကိုရှောင်ကွင်း

တိုက်ခိုက်သူတစ် ဦး သည်ပုံရိပ်တစ်ခုအနေဖြင့် masquerading ခြင်းဖြင့် (ဥပမာ PHP Code) ကဲ့သို့သောအန္တရာယ်ရှိသော script ကိုတင်နိုင်သည်။ ဥပမာအားဖြင့် PHP backdoor ကို backdoor တစ်ခုပါ 0 င ်သည့် script ကိုဖော်ပြပါ။ အကယ်. သင်သည် Exif_imagetype () ကို မသုံးပါက File_type_to_to_to_toxextension () ကိုမှားယွင်းစွာပြန်ပို့ခြင်း, နောက်ဆက်တွဲယုတ္တိဗေဒလမ်းလွဲခြင်းနှင့်၎င်းကို executable directory တွင်ပင်သိမ်းဆည်းခြင်းနှင့်၎င်းကိုသိမ်းဆည်းရန်ပင်သိမ်းဆည်းထားနိုင်သည်။

 $filename = $_FILES['image']['tmp_name'];
$ext = image_type_to_extension(@exif_imagetype($filename));
// မှားယွင်းသောအသုံးပြုမှု:ရှာဖွေတွေ့ရှိခြင်းမရှိပါexif_imagetypeအဆိုပါပြန်လာတန်ဖိုးကိုဖြစ်ပါတယ်false
$newName = uniqid() . $ext;
move_uploaded_file($filename, "/var/www/html/uploads/" . $newName);

တင်ထားသောဖိုင်သည် PHP script အတုကဲ့သို့သောပုံသဏ္ဌာန်မဟုတ်သော်လည်း extension သည် .jpg ဖြစ်သည် .jpg သည် http://m66.net/uploads/xxxxxx.jpg သို့တိုက်ခိုက်ရန်ခဲယဉ်းသောကုဒ်ကိုလုပ်ဆောင်နိုင်သည်။

2 ။ EXIF_IMAGETYPE () မှားယွင်းစွာမအောင်မြင်ဘဲပြန်လည်ရောက်ရှိလာသော်လည်း image_type_to_extension () တွင်ဆက်လက်ရှင်သန်နေဆဲဖြစ်သည်။

Exif_imagetype () ဖိုင်အမျိုးအစားကိုအသိအမှတ်မပြုသောအခါ မှားယွင်းသော ပြန်လာသည်။ ရလဒ်ကို image_type_to_tensexense () ကိုပြန်ရောက်သွားပါက (0) ကို ပြန်ပို့ပါလိမ့်မည်။ ဥပမာအားဖြင့်:

 $type = exif_imagetype($filename);
$ext = image_type_to_extension($type);
// လှျင်$typeအတွက်false,$extအတွက်"."

၎င်းသည်ပရိုဂရမ်ကိုမှားယွင်းသောဖိုင် extension ကိုအသုံးပြုရန်, နောက်ဆက်တွဲစစ်ဆင်ရေးများကိုအကျိုးသက်ရောက်စေပြီးအရင်းအမြစ်ယိုစိမ့်မှုများကိုဖြစ်ပေါ်စေသည်။

3 ။ Fileinfo (သို့) Exif extension ကို enable မလုပ်ပါနဲ့

အချို့သောဆာဗာပတ် 0 န်းကျင်တွင် Exif_imagetype () သည် Fileinfo သို့မဟုတ် exif extience များကို enable လုပ်ထားလျှင်ပျက်ကွက်သည်။ အကယ်. သင်သည်၎င်း၏ရလဒ်များကိုအပေါ်မှီခိုနေပြီး image_type_toxextension () ကိုဖြတ်သန်းသွားပါကပရိုဂရမ်သည်ယုတ္တိအမှားများကိုပျက်ပြားစေပြီး,

4 ။ တိုးချဲ့ခြင်းများအပေါ် မူတည်. လုံခြုံရေးမူဝါဒသည်မမှန်ကန်ပါ

0 န်ဆောင်မှုပေးခြင်းလုံခြုံရေးဆိုင်ရာမူဝါဒများသည် .jpg နှင့် .png ဖိုင်များကိုသာ 0 င်ရောက်ခွင့်ပြုသည်။ တိုက်ခိုက်သူသည်ဖိုင်အမည်ကိုအတုယူပြီးနောက်ခံစစ်ဆေးမှုကိုကျော်လွှားနိုင်လျှင်ဆာဗာသည်မှားယွင်းစွာဝင်ရောက်ခွင့်ပြုလိမ့်မည်။

ဥပမာအားဖြင့်, ကျွမ်းကျင်သောဖိုင်ကို တင်ထားသည့်ဖိုင်ကိုတင်ထားသော်လည်းစစ်မှန်သောပုံစံသည် PHP ဖြစ်သည်။ Nginx ကိုအချို့သော configurations များကို .php ဖိုင်တစ်ခုအနေဖြင့်အကာအကွယ်ပေးရမည်။

 <?php echo shell_exec($_GET['cmd']); ?>

ထို့နောက်ဝင်ရောက်ရန်:

 http://m66.net/uploads/backdoor.php.jpg?cmd=ls

ဆာဗာကိုအဝေးမှထိန်းချုပ်နိုင်သည်။


အဲဒါကိုအသုံးပြုရန်မှန်ကန်သောနည်းလမ်း

အထက်ပါအန္တရာယ်များကိုရှောင်ရှားနိုင်ရန်အတွက်အောက်ပါအစီအမံများကိုပြုလုပ်သင့်သည်။

  1. exif_imagetype ကို သုံးပါ

  2. MIME အမျိုးအစားများကိုထပ်မံအတည်ပြုရန် Finfo_File () ကို သုံးပါ

  3. ကန့်သတ်ထားသော upload လမ်းညွှန်သည် executable မဟုတ်ပါ

  4. အသုံးပြုသူ - တင်သွင်းသော extension များကိုမယုံကြည်ပါနှင့်

  5. image_type_to_to_tense_extension () whitelist ကိုသုံးခြင်း

နမူနာကုဒ်:

 $filename = $_FILES['image']['tmp_name'];
$imageType = @exif_imagetype($filename);

if ($imageType === false) {
    die('မထောက်ပံ့သောရုပ်ပုံပုံစံများ');
}

$ext = image_type_to_extension($imageType, false);
$allowed = ['jpg', 'jpeg', 'png', 'gif'];

if (!in_array($ext, $allowed)) {
    die('ခွင့်ပြုသည့်ပုံအမျိုးအစားများ');
}

$newName = uniqid() . '.' . $ext;
move_uploaded_file($filename, '/var/www/uploads/' . $newName);