လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP ၏ ImageCreatGDGD2 ကို အသုံးပြု. GD2 ပုံရိပ်များကိုတင်သည့်အခါ GD2 ပုံရိပ်များကိုတင်သည့်အခါလမ်းကြောင်းဖြတ်သန်းမှုများကိုမည်သို့ကာကွယ်နိုင်သနည်း။

PHP ၏ ImageCreatGDGD2 ကို အသုံးပြု. GD2 ပုံရိပ်များကိုတင်သည့်အခါ GD2 ပုံရိပ်များကိုတင်သည့်အခါလမ်းကြောင်းဖြတ်သန်းမှုများကိုမည်သို့ကာကွယ်နိုင်သနည်း။

M66 2025-05-18

PHP ၏ ISAMETREATGD2 function ကိုအသုံးပြုပြီး GD2 ပုံရိပ်များကိုတင်သောအခါ, input path ကိုမှန်ကန်စွာမပြုလုပ်ပါက, သတ်သတ်မှတ်မှတ်လမ်းကြောင်းများဆောက်လုပ်ခြင်းဖြင့်တိုက်ခိုက်သူသည်ဆာဗာတွင်အထိခိုက်မခံသောဖိုင်များကိုရယူနိုင်သည်။ ထို့ကြောင့်လမ်းကြောင်းဖြတ်သန်းမှုကိုမှန်ကန်စွာတားဆီးရန်အလွန်အရေးကြီးသည်။ ဤဆောင်းပါးသည်ထိုကဲ့သို့သောတိုက်ခိုက်မှုများကိုမည်သို့ထိရောက်စွာတားဆီးရမည်ကိုရှင်းပြပါမည်။

1 ။ လမ်းကြောင်းဖြတ်သန်းလမ်းကြောင်းကဘာလဲ။

လမ်းကြောင်းဖြတ်သန်းမှုသည်တိုက်ခိုက်သူအားတိုက်ခိုက်သူကိုရည်ညွှန်းသည် PHP တွင် ImagecreathrintGD2 function သည်မှန်ကန်သောစစ်ဆေးမှုလမ်းကြောင်းမပါဘဲပုံတစ်ပုံကို 0 င်ပါကဆာဗာတင်ခြင်းဆိုင်ရာအထိခိုက်မခံသောသတင်းအချက်အလက်များကိုယိုစိမ့်သွားစေနိုင်သည်။

2 ။ Imagecreathingdgd2 function ကို အသုံးပြု. ပုံကိုတင်ပါ

Imagecreathringdgd2 function သည် PHP မှ image files များမှရုပ်ပုံများကို GD2 format ဖြင့်ဖန်တီးရန် PHP မှပေးသော function တစ်ခုဖြစ်သည်။ အခြေခံအသုံးပြုမှုနည်းလမ်းမှာအောက်ပါအတိုင်းဖြစ်သည် -

 $image = imagecreatefromgd2($filename);

ဤလုပ်ဆောင်ချက်သည်ဖိုင်လမ်းကြောင်း parameter $ filename ကို ယူပြီးပုံကြူးကိုအရင်းအမြစ်တစ်ခုပြန်ပို့သည်။ အကယ်. လမ်းကြောင်းသည်မမှန်ကန်ပါကမှားယွင်းသောသို့မဟုတ်ဖိုင်ကိုလက်လှမ်းမမှီပါက မှားယွင်းသောအယူမှား သည်။

3 ။ လမ်းကြောင်းဖြတ်သန်းလမ်းကြောင်း၏အန္တရာယ်

Attackers သည်ဖိုင်လမ်းကြောင်းများကိုပြုပြင်ခြင်းဖြင့်လုံခြုံရေးကန့်သတ်ချက်များကိုကျော်လွှားနိုင်သည်။

 $image = imagecreatefromgd2('/var/www/html/uploads/../../etc/passwd');

အထက်ပါဥပမာတွင်တိုက်ခိုက်သူသည် server ပေါ်တွင် / etc / passwd file ကို server တွင်ကြည့်ရှုရန်ကြိုးစားသည်

4 ။ လမ်းကြောင်းဖြတ်သန်းမှုလမ်းကြောင်းကိုဘယ်လိုကာကွယ်နိုင်မလဲ။

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

4.1 ဖိုင်လမ်းကြောင်းကိုစစ်ဆေးပါ

ပထမ ဦး စွာဖိုင်လမ်းကြောင်းသည်ယုံကြည်စိတ်ချထိုက်ကြောင်းသေချာပါစေ။ သင် PHP ၏ Realpath () function ကိုသုံးနိုင်သည်။ အဆိုပါ functath () function ကို function ကိုပုံမှန် reflute လမ်းကြောင်းကိုပြန်ပို့ခြင်းနှင့်သင်္ကေတ links အားလုံး parses ။

 $filename = '/var/www/html/uploads/' . $_GET['filename']; // အသုံးပြုသူမှထည့်သွင်းထားသောဖိုင်လမ်းကြောင်းကိုရယူပါ
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0) {
    // လမ်းကြောင်းတရားဝင်သည်,နှင့်ခွင့်ပြု directory အတွင်း
    $image = imagecreatefromgd2($realpath);
} else {
    // မမှန်ကန်သောလမ်းကြောင်း,ဝန်ကိုငြင်းပယ်
    echo "Invalid file path!";
}

အထက်ပါကုဒ်တွင်ဖိုင်၏ပကတိလမ်းကြောင်းကိုရယူရန်အတွက်ပထမ ဦး ဆုံး function () function ကို ဦး စွာအသုံးပြုသည်။ ထို့နောက်၎င်းသည် / www / www / html / uploads / directory တွင်တည်ရှိသည်ကိုစစ်ဆေးပါ။ မရရှိလျှင်ဖိုင်ကိုဖွင့်ရန်ငြင်းဆန်သည်။

4.2 Whitelist ကို သုံး. ဖိုင်အမည်များကိုစစ်ဆေးပါ

တင်ရန်ခွင့်ပြုထားသည့်ဖိုင်အမည်များကို whitelist ကိုကန့်သတ်ထားနိုင်သည်။ ၎င်းသည်အန္တရာယ်ရှိသောဖိုင်များကိုတင်ခြင်းနှင့်တင်ခြင်းမှတားဆီးလိမ့်မည်။

 $allowed_files = ['image1.gd2', 'image2.gd2']; // မိန်းမဖြူပညာရှင်
$filename = $_GET['filename'];

if (in_array($filename, $allowed_files)) {
    $image = imagecreatefromgd2('/var/www/html/uploads/' . $filename);
} else {
    echo "File not allowed!";
}

4.3 သင်္ကေတ link တိုက်ခိုက်မှုတားဆီး

Symlinks လမ်းကြောင်းဖြတ်သန်းတိုက်ခိုက်မှုများပြုလုပ်ရန်အသုံးပြုနိုင်သည်။ ဖိုင်လမ်းကြောင်းသည်ရုပ်ပိုင်းဆိုင်ရာပစ္စုပ္ပန်ဖြစ်ပြီး Realpath () အသုံးပြုခြင်းဖြင့်သင်္ကေတအချင်းချင်းချိတ်ဆက်မှုများမပါ 0 င်နိုင်ပါ။ ၎င်းသည်ပုံဆောင်ဆက်သွယ်မှုများမှတဆင့် 0 င်ရောက်ခြင်းမပြုသင့်သောဖိုင်များသို့ 0 င်ရောက်ခြင်းကိုကာကွယ်ပေးသည်။

 $filename = '/var/www/html/uploads/' . $_GET['filename'];
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0 && !is_link($realpath)) {
    // လမ်းကြောင်းတရားဝင်သည်,နှင့်အဘယ်သူမျှမသင်္ကေတ links
    $image = imagecreatefromgd2($realpath);
} else {
    echo "Invalid file path or symbolic link detected!";
}

5 ။ အကျဉ်းချုပ်

PHP ၏ ImagecreatGDGD2 function ကို အသုံးပြု. GD2 ပုံရိပ်များကိုတင်သောအခါ traversal တိုက်ခိုက်မှုများကိုကာကွယ်ခြင်းသည်အလွန်အရေးကြီးသည်။ ထိုကဲ့သို့သောတိုက်ခိုက်မှုများ၏အန္တရာယ်ကိုဖိုင်လမ်းကြောင်းများစစ်ဆေးခြင်းဖြင့်ဖောင်းပွသူများကိုစစ်ဆေးခြင်း, သင်္ကေတများစစ်ဆေးခြင်းကိုစစ်ဆေးခြင်း, သင်္ကေတများလုံခြုံမှုကိုစစ်ဆေးရန်နှင့်အထိခိုက်မခံသောအချက်အလက်များကိုသေချာစေရန်နှင့်အထိခိုက်မခံသောအချက်အလက်ချိုးဖောက်မှုများကိုသေချာစေရန်အမြဲတမ်းသတိထားပါ။