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 ကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။
@ သင်္ကေတသည် 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 သည်နောက်မှအိမ်ရှင်အမည်ဖြစ်သည်။
@ @ 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 ရှောင်ရှားနိုင်ပါတယ်။
URL ၏အရင်းအမြစ်ကိုသင်မထိန်းချုပ်နိုင်ပါက (ဥပမာ - အသုံးပြုသူထည့်သွင်းမှုသို့မဟုတ်တတိယပါတီဒေတာ) ကိုမခေါ်မီပုံမှန်ကိုက်ညီမှုနှင့်သန့်ရှင်းရေး URL များကိုပုံမှန်ပြုလုပ်နိုင်သည် ။
ဥပမာအားဖြင့်:
$url = 'http://gitbox.net/path@something';
$cleaned_url = preg_replace('/(?<!:)@/', '%40', $url);
print_r(parse_url($cleaned_url));
ဤပုံမှန်ကိုပြန်လည်နေရာချထားခြင်းသည် @ အသုံးပြုသူအချက်အလက်များကိုဆက်လက်ထိန်းသိမ်းထားမည်ဖြစ်သော်လည်းအခြားနေရာများတွင် @ encode လုပ်လိမ့်မည်။
ရှုပ်ထွေးသောအဆောက်အအုံများသို့မဟုတ်မသေချာမရေရာသောပုံစံများပါသော URLs များအတွက်တစ်ခါတစ်ရံတွင်၎င်းတို့ကို string functions ( exploit , substrts နှင့် str st strpos ) ဖြင့်၎င်းတို့ကို persing လုပ်ခြင်းသည် ပို. လုံခြုံပြီးယုံကြည်စိတ်ချရစေသည်။
Parse_Url သည်အစွမ်းထက်သော်လည်းအသိဉာဏ်ရှိသောလုပ်ဆောင်မှုမဟုတ်ပါ။ ၎င်းသည် URL သတ်မှတ်ချက်များကိုတင်းကြပ်စွာလိုက်နာသည် ။ သူတို့ရဲ့အပြုအမူနောက်ကွယ်မှစံသတ်မှတ်ချက်ကိုနားလည်ခြင်းသည်ပြ the နာကိုဖြေရှင်းရန်ပထမခြေလှမ်းဖြစ်သည်။
အကြံပြုထားသည့်အလေ့အကျင့်များမှာ -
non-authentication ကိုရည်ရွယ်ချက်များအတွက် @ ကြောင်း @ သေချာစွာ encoded ဖြစ်ပါတယ်သေချာပါစေ
ပထမ ဦး ဆုံး untrusted URLs သန့်ရှင်းရေး
လိုအပ်ပါက URLs ကိုခွဲခြမ်းစိတ်ဖြာရန်ပုံမှန်သို့မဟုတ်ထုံးစံလုပ်ဆောင်ချက်များကိုသုံးပါ
ဤနည်းလမ်းများမှတစ်ဆင့် Parse_URL parsing အမှားများကိုအကြီးမားဆုံးအတိုင်းအတာအထိရှောင်ရှားနိုင်သည်။