PHP applications များကိုတီထွင်သည့်အခါကျွန်ုပ်တို့သည် Get_Client_Version () သို့မဟုတ်အလားတူလုပ်ဆောင်ချက်များကိုအထူးသဖြင့် API ဗားရှင်း, client classibility processisys ကိုလုပ်ဆောင်သောအခါအထူးသဖြင့်သုံးစွဲရန်လိုအပ်သည်။ သို့သော်လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်ဤလုပ်ဆောင်ချက်သည်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့် client version နံပါတ်ကိုမှန်ကန်စွာရယူရန်ပျက်ကွက်လေ့ရှိသည်။ ဤဆောင်းပါးသည်ဤပြ problem နာနှင့်၎င်း၏ဖြေရှင်းချက်များ၏နက်ရှိုင်းသောဘုံအကြောင်းများကိုလေ့လာလိမ့်မည်။
အကြိမ်ပေါင်းများစွာ client သည်တောင်းဆိုမှု header header သို့မဟုတ်တောင်းဆိုမှုမှတစ်ဆင့်ဗားရှင်းနံပါတ်ကိုဆာဗာသို့အတိအလင်းမအောင်မြင်ပါ။ ဥပမာအားဖြင့်မိုဘိုင်းသို့မဟုတ်ဝက်ဘ်ရှေ့မှောက်တွင် device-end developer များသည်ဗားရှင်းအချက်အလက်များကိုဖြတ်ကျော်ရန်လိုအပ်သည်ကိုမသိရှိရသေးပါ။
Get_Client_Version () သည် များသောအားဖြင့် အသုံးပြုသူ - ကိုယ်စားလှယ် သို့မဟုတ်ဓလေ့ထုံးစံအရ X-client-version ကဲ့သို့သော HTTP header (X-client-version ) တွင်မူတည်သည်။ ခွဲခြမ်းစိတ်ဖြာမှုယုတ္တိဗေဒကိုလုံလောက်စွာမရေးနိုင်ပါက Exploit ကို အသုံးပြုခြင်းကိုအသုံးပြုခြင်းသည်အလွယ်တကူ 0 င်ရောက်ခြင်းကိုသာပြုလုပ်နိုင်သည်ဆိုပါက 0 န်ဆောင်မှုခံယူနိုင်သောပုံစံများကိုမစုစည်းသောအခါကျရှုံးရန်လွယ်ကူသည်။
၎င်း၏ကိုယ်ပိုင်အချက်အလက်များကိုဖုံးကွယ်ရန်ဖောက်သည်အချို့သည် အသုံးပြုသူအေးဂျင့် string ကိုပြုပြင်မွမ်းမံခြင်းသို့မဟုတ်၎င်းကိုမပို့ပါနှင့်။ ၎င်းသည်မကြာခဏတွားတတ်သောလူနေအိမ်အချို့သို့မဟုတ်တတိယပါတီ၏တောင်းဆိုမှုကိရိယာများကြောင့်ဖြစ်သည်။
အကယ်. သင်၏လျှောက်လွှာကိုပြောင်းပြန် proxy (Nginx ကဲ့သို့) သို့မဟုတ် CDN (screenflare ကဲ့သို့သော) ကိုအသုံးပြုပြီးနောက် (ထိုကဲ့သို့သော cloudflare ကဲ့သို့သော) ကိုအသုံးပြုပြီးနောက် headers headers headers headers အချို့ကိုပုံမှန်အားဖြင့် filter လုပ်ထားနိုင်ပြီး client ၏မူလဗားရှင်းအချက်အလက်ကိုမရရှိနိုင်ပါ။
Clients အားလုံးသည် (IOS, Android နှင့် Web တို့အပါအ 0 င်) သည်အောက်ပါထုံးစံခေါင်းစဉ်ကို အသုံးပြု. ဗားရှင်းနံပါတ်ကိုယူဆောင်လာနိုင်ကြောင်းသေချာပါစေ။
X-Client-Version: 2.5.1
Code တွင်ကျွန်ုပ်တို့သည်၎င်းကိုဤသို့ထုတ်ယူနိုင်သည်။
function get_client_version() {
$headers = getallheaders();
return isset($headers['X-Client-Version']) ? $headers['X-Client-Version'] : 'unknown';
}
အသုံးပြုသူအေးဂျင့်ကိုအသုံးပြုပါကပုံမှန်လိုက်စားသော version format ကိုသုံးနိုင်သည်။
function get_client_version_from_ua() {
$ua = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/AppName\/([0-9\.]+)/', $ua, $matches)) {
return $matches[1];
}
return 'unknown';
}
ဥပမာအားဖြင့်အသုံးပြုသူ Agent String သည် -
Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppName/2.3.4
ဤနည်းဥပဒေသည် 2.3.4 ကို အောင်မြင်စွာထုတ်ယူနိုင်သည်။
header ကို filter လုပ်ထားသည်ဟုသင်သံသယရှိပါက server configuration တွင်ဆက်လက်ထိန်းသိမ်းရန်လိုအပ်သော header ကိုအတိအကျသတ်မှတ်နိုင်သည်။ ဥပမာအားဖြင့်, Nginx တွင်ထည့်ပါ။
proxy_set_header X-Client-Version $http_x_client_version;
ဆာဗာသည် 0 န်ဆောင်မှုခံယူသူမှဖြတ်သန်းသွားသော header အချက်အလက်များကိုအပြည့်အဝရယူနိုင်ကြောင်းသေချာပါစေ။
တောင်းဆိုမှုတွင် header အချက်အလက်များကိုမှတ်တမ်းတင်ရန် Debug log ထည့်သွင်းခြင်းကကိစ္စများကိုလျင်မြန်စွာရှာဖွေရန်အထောက်အကူပြုသည်။ ဥပမာအားဖြင့်:
file_put_contents('/tmp/client_headers.log', print_r(getallheaders(), true));
မှတ်တမ်းဖိုင်ကိုကြည့်ခြင်း /tmp/Client_Headers.log ကိုကြည့်ခြင်းအားဖြင့်သင်သည်မည်သည့်ခေါင်းစီးကို client မှကူးစက်ကြောင်းသင်သိနိုင်သည်။
client develiefers debugughation ကိုကူညီရန်လက်ရှိတောင်းဆိုချက်အချက်အလက်များကို output လုပ်ရန် interface တစ်ခုကိုခေတ္တတည်ဆောက်နိုင်သည်။
// https://api.gitbox.net/debug/client-info
header('Content-Type: application/json');
echo json_encode([
'headers' => getallheaders(),
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? 'N/A',
]);
Get_Client_Version () သည် စစ်မှန်သောဗားရှင်းနံပါတ်ကိုမရရှိနိုင်သည့်ပြ problem နာသည် function ၏အမှားအယွင်းမဟုတ်သော်လည်းမမှန်မကန် client transmission, ရှေ့နောက်မညီ parsing methods သို့မဟုတ် server configuration ၏ရလဒ်ဖြစ်သည်။ ဤပြ problem နာအမျိုးအစားကိုဖြေရှင်းရန်သော့ချက်သည် 0 န်ဆောင်မှုခံယူသူနှင့်ဆာဗာအကြားရှင်းလင်းပြတ်သားစွာသဘောတူညီချက် ဖြင့်တည်ရှိပြီးကျိုးကြောင်းဆီလျော်သောသစ်ခုတ်ခြင်းနှင့် debugging tools များဖြင့်ဖြည့်စွက်သည်။
အကယ်. သင်သည်အလားတူပြ problems နာများကိုသင်ကြုံတွေ့ရပါကအထက်ပါဖြစ်နိုင်ချေကိုတစ် ဦး ချင်းစီအားဖြင့်စစ်ဆေးကြည့်ရှုပါ။