လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> 0 န်ဆောင်မှုတွင်တရားမ 0 င်ဒေတာထိုးဆေးထိုးခြင်းကိုတားဆီးရန် Socket_Accept () နည်းလမ်း

0 န်ဆောင်မှုတွင်တရားမ 0 င်ဒေတာထိုးဆေးထိုးခြင်းကိုတားဆီးရန် Socket_Accept () နည်းလမ်း

M66 2025-05-18

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 င်ဒေတာထိုးဆေးကိုကာကွယ်ရန်ထိရောက်သောနည်းလမ်းများစွာကိုမိတ်ဆက်ပေးလိမ့်မည်။

1 ။ input data များ၏အရှည်ကန့်သတ်

Socket_read ကို အသုံးပြု. client_Read ကို အသုံးပြု. စာသင်ခန်းမှအချက်အလက်များကိုဖတ်သည့်အချက်အလက်များကိုဖတ်ရှုသောအခါအမြင့်ဆုံးဖတ်သည့်အရှည်ကိုသတ်မှတ်ရန်သေချာပါစေ။

 $buffer = socket_read($clientSocket, 2048, PHP_NORMAL_READ);

အများဆုံးဖတ်သည့်အရှည်ကို 2048 bytes သို့သတ်မှတ်သည်။ အကယ်. သုံးစွဲသူသည်ဤအရှည်ထက်ကျော်လွန်သောအချက်အလက်များကိုပေးပို့ရန်ကြိုးစားပါက၎င်းသည်အလိုအလျောက်စစ်ဆေးခြင်း,

2 ။ တင်းကြပ်စွာ checksum input data ကို filter

ဒေတာများကိုဖတ်ရှုပြီးနောက်, 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;
}

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

3 ။ တောင်းဆိုမှုကိုသဘောတူညီချက်ကိုဒီဇိုင်းဆွဲပါ

အကယ်. ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူသည်စိတ်ကြိုက် protocol မှတဆင့်ဆက်သွယ်ပါကရှင်းလင်းသောမက်ဆေ့ခ်ျကိုပုံစံနှင့်နယ်နိမိတ်ကိုဒီဇိုင်းဆွဲရန်သေချာပါစေ။ ရိုးရှင်းသောဥပမာတစ်ခုပေးရန် client သည်သော့ချက်စာလုံးနှင့်စတင်သည့် packet ကိုပို့ရမည်ဟုသတ်မှတ်နိုင်သည်။

 if (strpos($input, 'CMD:') !== 0) {
    socket_write($clientSocket, "protocol format အမှား!\n");
    socket_close($clientSocket);
    exit;
}

ဤနည်းအားဖြင့်မမှန်ကန်သောသို့မဟုတ်အန္တရာယ်ရှိတဲ့တောင်းဆိုမှုများကို protocol အဆင့်တွင်ပိတ်ဆို့နိုင်သည်။

4 ။ အချိန်ကုန်ယန္တရားကိုသုံးပါ

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

 socket_set_option($clientSocket, SOL_SOCKET, SO_RCVTIMEO, ["sec"=>5, "usec"=>0]);

အကယ်. 0 န်ဆောင်မှုခံယူသူသည် 5 စက္ကန့်အတွင်းမည်သည့်အချက်အလက်များကိုမပို့ပါကဆာဗာသည်အလိုအလျောက်ပြတ်တောက်လိမ့်မည်။ ဤချဉ်းကပ်မှုသည် 0 န်ဆောင်မှု (DOS) တိုက်ခိုက်မှုများကိုထိရောက်စွာငြင်းပယ်ခံရနိုင်သည်။

5 ။ မှတ်တမ်းများမှတ်တမ်းများကိုမှတ်တမ်းတင်ခြင်းနှင့်မိတ္တူပွားအမှားတောင်းဆိုမှုများကိုကန့်သတ်ပါ

တရားမ 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 န်ဆောင်မှုခံယူသူနှင့်အပြန်အလှန်ဆက်သွယ်သောအချက်အလက်များတိုင်းသည်အလားအလာရှိသောတိုက်ခိုက်မှုအားနည်းချက်တစ်ခုဖြစ်ပြီးကာကွယ်ရေးသည်ပထမဆုံးကုဒ်နံပါတ်ဖြင့်စတင်သည်။