လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> URL တွင် @ @ ဇာတ်ကောင်များပါ 0 င်သည့် Parse_URL ၏အထူးကိုင်တွယ်ခြင်း

URL တွင် @ @ ဇာတ်ကောင်များပါ 0 င်သည့် Parse_URL ၏အထူးကိုင်တွယ်ခြင်း

gitbox 2025-05-20

PHP ၏ Parse_url function ကို URLs များအသုံးပြုရန်အတွက် URL များတွင် url တွင်ပါ 0 င်ပါက @ @ သင်္ကေတပါ 0 င်ပါကအမှားများသို့မဟုတ်ရလဒ်များသည်မျှော်လင့်ချက်များနှင့်မကိုက်ညီပါ။ ဤအမူအကျင့်သည် developer များကိုမကြာခဏရှုပ်ထွေးစေသည်,

ဤဆောင်းပါးသည်ဤပြ problem နာ၏အဓိကအကြောင်းရင်းကိုခွဲခြမ်းစိတ်ဖြာပြီးတုန့်ပြန်မှုမဟာဗျူဟာပေးလိမ့်မည်။

@ သင်္ကေတ၏အဓိပ္ပါယ်

URL တွင် @ သည်အထူးအဓိပ္ပာယ်ရှိသောဇာတ်ကောင်တစ်ခုဖြစ်သည်။ RFC 3986 အရသုံးစွဲသူသတင်းအချက်အလက် (အသုံးပြုသူအချက်အလက်) နှင့် hostname ကိုခွဲခြားရန်အသုံးပြုသည်။ ဥပမာအားဖြင့်:

 http://user:[email protected]/path

ဒီဥပမာမှာ -

  • အသုံးပြုသူအမည်သည် အသုံးပြုသူ ဖြစ်သည်

  • စကားဝှက် Pass ဖြစ်ပါတယ်

  • Host သည် gitbox.net ဖြစ်သည်

PHP ၏ Parse_url သည် ဤစံနှုန်းနှင့်အညီ URL ကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။

ပြ problem နာပေါ်ပေါက်လာဘယ်မှာဇာတ်လမ်း

@ သင်္ကေတသည် authentication non-accismation information တွင်ပေါ်လာသည့်အခါပြနာသည်များသောအားဖြင့်ဖြစ်သည်။ ဥပမာအားဖြင့်:

 $url = 'http://gitbox.net/path@something';
$parsed = parse_url($url);
print_r($parsed);

output ကိုဤကဲ့သို့သောအရာတစ်ခုခုဖြစ်လိမ့်မည်ဟုသင်မျှော်လင့်ပေမည်။

 Array
(
    [scheme] => http
    [host] => gitbox.net
    [path] => /path@something
)

ဒါပေမယ့်အမှန်တကယ် output ကိုဖြစ်လိမ့်မယ်:

 Array
(
    [scheme] => http
    [host] => something
    [user] => gitbox.net
    [path] => /
)

ဘာဖြစ်လို့လဲဆိုတော့ Parse_Url က @ သင်္ကေတကြုံတွေ့ရပြီးတဲ့နောက်အရင်အပိုင်းဟာအသုံးပြုသူအချက်အလက်ဖြစ်တယ်လို့အလိုအလျောက်စဉ်းစားလိမ့်မယ်။ URL သည် authentication information information မပါ 0 င်ပါကပင်စံနှုန်းများနှင့်အညီခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။

ပိုမိုအစွန်းရောက်ဥပမာများ

 $url = 'http://foo@[email protected]/';
print_r(parse_url($url));

output ကို:

 Array
(
    [scheme] => http
    [user] => foo
    [pass] => bar
    [host] => gitbox.net
    [path] => /
)

ဤနေရာတွင် PHP သည် Foo @ bar ကို အသုံးပြုသူအဖြစ်အသိအမှတ်ပြုသည်။ Pass နှင့် GitBox.net သည်နောက်မှအိမ်ရှင်အမည်ဖြစ်သည်။

နည်းဗျူဟာများကိုကိုင်တွယ်ဖြေရှင်းခြင်း

1 ။ @ အက္ခရာများ encoding

@ @ url ထဲရှိ @ @ icl သည်အသုံးပြုသူ၏ authentication information ၏အစိတ်အပိုင်းမဟုတ်သင့်ကြောင်းသင်သိပါက၎င်းကို % 40 အဖြစ် encode လုပ်နိုင်သည်။ ဥပမာအားဖြင့်:

 $url = 'http://gitbox.net/path%40something';
print_r(parse_url($url));

output ကို:

 Array
(
    [scheme] => http
    [host] => gitbox.net
    [path] => /path@something
)

ဤသည် @ ၏အဓိပ္ပာယ်ကိုမှားယွင်းစွာမစဉ်းစားဘဲ parse_url ရှောင်ရှားနိုင်ပါတယ်။

2 ။ ပုံမှန်အကူအညီ URL သန့်ရှင်းရေးကိုသုံးပါ

URL ၏အရင်းအမြစ်ကိုသင်မထိန်းချုပ်နိုင်ပါက (ဥပမာ - အသုံးပြုသူထည့်သွင်းမှုသို့မဟုတ်တတိယပါတီဒေတာ) ကိုမခေါ်မီပုံမှန်ကိုက်ညီမှုနှင့်သန့်ရှင်းရေး URL များကိုပုံမှန်ပြုလုပ်နိုင်သည်

ဥပမာအားဖြင့်:

 $url = 'http://gitbox.net/path@something';
$cleaned_url = preg_replace('/(?<!:)@/', '%40', $url);
print_r(parse_url($cleaned_url));

ဤပုံမှန်ကိုပြန်လည်နေရာချထားခြင်းသည် @ အသုံးပြုသူအချက်အလက်များကိုဆက်လက်ထိန်းသိမ်းထားမည်ဖြစ်သော်လည်းအခြားနေရာများတွင် @ encode လုပ်လိမ့်မည်။

3 ။ ကိုယ်တိုင် partse အဓိကအစိတ်အပိုင်းများ

ရှုပ်ထွေးသောအဆောက်အအုံများသို့မဟုတ်မသေချာမရေရာသောပုံစံများပါသော URLs များအတွက်တစ်ခါတစ်ရံတွင်၎င်းတို့ကို string functions ( exploit , substrts နှင့် str st strpos ) ဖြင့်၎င်းတို့ကို persing လုပ်ခြင်းသည် ပို. လုံခြုံပြီးယုံကြည်စိတ်ချရစေသည်။

အကျဉ်းချုပ်

Parse_Url သည်အစွမ်းထက်သော်လည်းအသိဉာဏ်ရှိသောလုပ်ဆောင်မှုမဟုတ်ပါ။ ၎င်းသည် URL သတ်မှတ်ချက်များကိုတင်းကြပ်စွာလိုက်နာသည် သူတို့ရဲ့အပြုအမူနောက်ကွယ်မှစံသတ်မှတ်ချက်ကိုနားလည်ခြင်းသည်ပြ the နာကိုဖြေရှင်းရန်ပထမခြေလှမ်းဖြစ်သည်။

အကြံပြုထားသည့်အလေ့အကျင့်များမှာ -

  • non-authentication ကိုရည်ရွယ်ချက်များအတွက် @ ကြောင်း @ သေချာစွာ encoded ဖြစ်ပါတယ်သေချာပါစေ

  • ပထမ ဦး ဆုံး untrusted URLs သန့်ရှင်းရေး

  • လိုအပ်ပါက URLs ကိုခွဲခြမ်းစိတ်ဖြာရန်ပုံမှန်သို့မဟုတ်ထုံးစံလုပ်ဆောင်ချက်များကိုသုံးပါ

ဤနည်းလမ်းများမှတစ်ဆင့် Parse_URL parsing အမှားများကိုအကြီးမားဆုံးအတိုင်းအတာအထိရှောင်ရှားနိုင်သည်။