PHP ၏ Low-Level Network Programming Interface ကိုအသုံးပြုသောအခါ socket_accept () function သည် inbound connection များကိုကိုင်တွယ်ရာတွင်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည် sociec_create () , socket_bind () နှင့် socket_listen () နှင့် socket_listen () နှင့် socket_listen ()) နှင့် တွဲဖက်. အသုံးပြုလေ့ရှိသည်။ ဤလုပ်ငန်းစဉ်သည်အလွန်အခြေခံထားသော်လည်း၎င်းသည်လုံခြုံစိတ်ချရသောအန္တရာယ်များနှင့်ပြည့်နှက်နေသည်။ အထူးသဖြင့် client connection များကိုလက်ခံပြီးနောက်မလျော်ကန်စွာကိုင်တွယ်လျှင်တရားမ 0 င်ဒေတာထိုးဆေးထိုးတိုက်ခိုက်မှုများကိုခံစားရန်အလွန်လွယ်ကူသည်။
ဤဆောင်းပါးသည် Socket_Accept () တွင်တရားမ 0 င်ဒေတာထိုးဆေးကိုကာကွယ်ရန်ထိရောက်သောနည်းလမ်းများစွာကိုမိတ်ဆက်ပေးလိမ့်မည်။
Socket_read ကို အသုံးပြု. client_Read ကို အသုံးပြု. စာသင်ခန်းမှအချက်အလက်များကိုဖတ်သည့်အချက်အလက်များကိုဖတ်ရှုသောအခါအမြင့်ဆုံးဖတ်သည့်အရှည်ကိုသတ်မှတ်ရန်သေချာပါစေ။
$buffer = socket_read($clientSocket, 2048, PHP_NORMAL_READ);
အများဆုံးဖတ်သည့်အရှည်ကို 2048 bytes သို့သတ်မှတ်သည်။ အကယ်. သုံးစွဲသူသည်ဤအရှည်ထက်ကျော်လွန်သောအချက်အလက်များကိုပေးပို့ရန်ကြိုးစားပါက၎င်းသည်အလိုအလျောက်စစ်ဆေးခြင်း,
ဒေတာများကိုဖတ်ရှုပြီးနောက်, format checksum တရားမဝင်သောဇာတ်ကောင်စစ်ထုတ်ခြင်းကိုချက်ချင်းပြုလုပ်သင့်သည်။ ဒေတာများကိုလုပ်ဆောင်ရန်ပုံမှန်အသုံးအနှုန်းများ (သို့) Php Built-in filtering function များကိုအသုံးပြုရန်အကြံပြုသည်။ ဥပမာအားဖြင့်:
$input = trim($buffer);
if (!preg_match('/^[a-zA-Z0-9\s]+$/', $input)) {
socket_write($clientSocket, "တရားမဝင် input ကို!\n");
socket_close($clientSocket);
exit;
}
ဤနည်းလမ်းသည်အချက်အလက်များကိုထိန်းချုပ်သောစာလုံးများ, အထူးသင်္ကေတများသို့မဟုတ်အန္တရာယ်ရှိသောအမိန့်များဖြင့်အချက်အလက်များကိုထိရောက်စွာတားဆီးနိုင်သည်။
အကယ်. ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူသည်စိတ်ကြိုက် protocol မှတဆင့်ဆက်သွယ်ပါကရှင်းလင်းသောမက်ဆေ့ခ်ျကိုပုံစံနှင့်နယ်နိမိတ်ကိုဒီဇိုင်းဆွဲရန်သေချာပါစေ။ ရိုးရှင်းသောဥပမာတစ်ခုပေးရန် client သည်သော့ချက်စာလုံးနှင့်စတင်သည့် packet ကိုပို့ရမည်ဟုသတ်မှတ်နိုင်သည်။
if (strpos($input, 'CMD:') !== 0) {
socket_write($clientSocket, "protocol format အမှား!\n");
socket_close($clientSocket);
exit;
}
ဤနည်းအားဖြင့်မမှန်ကန်သောသို့မဟုတ်အန္တရာယ်ရှိတဲ့တောင်းဆိုမှုများကို protocol အဆင့်တွင်ပိတ်ဆို့နိုင်သည်။
0 န်ဆောင်မှုခံယူသူများကိုအဆက်မပြတ်ဆက်သွယ်မှုများကိုကြာရှည်စွာထားရှိရန်နှင့်အဆက်မပြတ်အချက်အလက်များကိုစဉ်ဆက်မပြတ်ပေးပို့ခြင်းမှကာကွယ်ရန်တားဆီးရန်အကြံပြုသည်။
socket_set_option($clientSocket, SOL_SOCKET, SO_RCVTIMEO, ["sec"=>5, "usec"=>0]);
အကယ်. 0 န်ဆောင်မှုခံယူသူသည် 5 စက္ကန့်အတွင်းမည်သည့်အချက်အလက်များကိုမပို့ပါကဆာဗာသည်အလိုအလျောက်ပြတ်တောက်လိမ့်မည်။ ဤချဉ်းကပ်မှုသည် 0 န်ဆောင်မှု (DOS) တိုက်ခိုက်မှုများကိုထိရောက်စွာငြင်းပယ်ခံရနိုင်သည်။
တရားမ 0 င်အချက်အလက်များကိုအကြိမ်ကြိမ်ပေးပို့သည့် client IP များအနေဖြင့်, ပိတ်ဆို့ခြင်းသို့မဟုတ်ယာယီပိတ်ဆို့ခြင်းကိုထည့်သွင်းစဉ်းစားသင့်သည်။ တစ်ချိန်တည်းမှာပင်တရားမ 0 င်အချက်အလက်များကြိုးပမ်းမှုတစ်ခုစီကိုမှတ်တမ်းတင်ခြင်းသည်နောက်ပိုင်းတွင်တိုက်ခိုက်မှုခြေရာခံခြင်းနှင့်မူဝါဒချိန်ညှိချက်များအတွက်လည်းအရေးပါသည်။
file_put_contents('logs/illegal_access.log', $_SERVER['REMOTE_ADDR'] . " - $input\n", FILE_APPEND);
အန္တရာယ်ရှိသောတောင်းဆိုချက်များကိုအလိုအလျောက်ပိတ်ဆို့ရန်အတွက် firewall စည်းမျဉ်းများကိုသင်ပေါင်းစပ်နိုင်သည်။
အောက်ဖော်ပြပါသည်အထက်ပါကာကွယ်ရေးအစီအမံများကိုပေါင်းစပ်သောအခြေခံ Socket Server အကောင်အထည်ဖော်မှုဖြစ်သည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 12345);
socket_listen($socket);
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
continue;
}
socket_set_option($clientSocket, SOL_SOCKET, SO_RCVTIMEO, ["sec"=>5, "usec"=>0]);
$buffer = socket_read($clientSocket, 2048, PHP_NORMAL_READ);
$input = trim($buffer);
if (!preg_match('/^[a-zA-Z0-9\s]+$/', $input)) {
socket_write($clientSocket, "တရားမဝင် input ကို!\n");
file_put_contents('/var/log/socket_illegal.log', "တရားမဝင်ဝင်ရောက်ခွင့်ကြိုးပမ်းမှု: $input\n", FILE_APPEND);
socket_close($clientSocket);
continue;
}
// နမူနာအပြောင်းအလဲအတွက်ယုတ္တိဗေဒ
socket_write($clientSocket, "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် m66.net Socket အစေခံ!\n");
socket_close($clientSocket);
}
PHP တွင် Socket Programming ကိုတိုက်ရိုက်အသုံးပြုသော်လည်း developer များသည်လည်းဒေတာဆက်သွယ်ရေးလုံခြုံရေးကိုအပြည့်အဝနားလည်ရန်လည်းလိုအပ်သည်။ စာဖတ်ခြင်းအရှည်ကိုက န့ ်သတ်ခြင်းဖြင့် comp information protocols များကိုသတ်မှတ်ခြင်း,
အမြဲတမ်းသတိရပါ။ 0 န်ဆောင်မှုခံယူသူနှင့်အပြန်အလှန်ဆက်သွယ်သောအချက်အလက်များတိုင်းသည်အလားအလာရှိသောတိုက်ခိုက်မှုအားနည်းချက်တစ်ခုဖြစ်ပြီးကာကွယ်ရေးသည်ပထမဆုံးကုဒ်နံပါတ်ဖြင့်စတင်သည်။