PHP တွင် Session Management သည် Web Development ၏အရေးပါသောအစိတ်အပိုင်းဖြစ်သည်။ ပုံမှန်အားဖြင့် PHP သည် Session_ID () ကို အသုံးပြု. အသုံးပြုသူတစ် ဦး စီ၏ session တစ်ခုသည်ထူးခြားသည်။ သို့သော်အချို့သော application တစ်ခုတွင်လုံခြုံရေးလိုအပ်ချက်များရှိသောအခြေအနေများတွင်ပုံမှန်အစည်းအဝေး session ID မျိုးထုတ်လုပ်မှုယန္တရားသည်လုံလောက်မှုမရှိပါ။ ထို့ကြောင့် PHP သည် session develop များကို session data များပိုမိုလုံခြုံစေရန် session များ၏ session များ၏မျိုးဆက်နှင့်ကာကွယ်စောင့်ရှောက်ရေးယန္တရားကိုစိတ်ကြိုက်ပြုပြင်ခွင့်ပြုသည်။
ဤဆောင်းပါးသည် Session Data, သတ်သတ်မှတ်မှတ်အဆင့်များနှင့်ကြိုတင်ကာကွယ်မှုများပြုလုပ်ရန် PHP တွင် SessionITCONFACE ကို မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်လေ့လာလိမ့်မည်။
SessionInterface ဆိုသည်မှာ PHP 7.1 တွင်မိတ်ဆက်သည့် interface ကိုမိတ်ဆက်ပေးပြီး developer များက developer များ Session IDS ထုတ်လုပ်ရန်နည်းလမ်းကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။ ဤ interface ကိုအကောင်အထည်ဖော်ခြင်းအားဖြင့် developer များကဖန်တီးမှု, စာဝှက်ခြင်း, အတည်ပြုခြင်းနှင့်အခြား session id ၏အခြားဖြစ်စဉ်များကိုထိန်းချုပ်နိုင်ပြီး session ၏လုံခြုံရေးကိုတိုးမြှင့်နိုင်သည်။
SessionInterface သည် အောက်ပါနည်းလမ်းများကိုသတ်မှတ်သည်။
GenerateID () - session id အသစ်တစ်ခုကိုထုတ်ပေးသည်။
revestateID ($ ID) - ပေးထားသော session ID သည်မှန်ကန်ကြောင်းစစ်ဆေးပါ။
UpdateID ($ ID) - session id အသစ်ကို ID အသစ်ပေါ် အခြေခံ. အသစ်ပြောင်းခြင်း။
ဤ interface ကိုအကောင်အထည်ဖော်ခြင်းအားဖြင့် developer များက session id ၏မျိုးဆက်နည်းလမ်းကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။
ပထမ ဦး စွာ developer များ session id ၏မျိုးဆက်စည်းမျဉ်းစည်းကမ်းများကိုစိတ်ကြိုက်ပြုပြင်ရန် SessionInterface interface ကိုအကောင်အထည်ဖော်ရန်လိုအပ်သည်။ ဤတွင်ရိုးရှင်းသောအကောင်အထည်ဖော်မှုဥပမာတစ်ခုမှာ timestamp နှင့် encrypted string တစ်ခုနှင့် Session ID ကိုမည်သို့ထုတ်လုပ်ရမည်ကိုပြသသည့်ရိုးရှင်းသောအကောင်အထည်ဖော်မှုဥပမာတစ်ခုဖြစ်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">SecureSessionIdGenerator</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">SessionIdInterface</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateId</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">string</span></span><span> {
</span><span><span class="hljs-comment">// လက်ရှိ timestamp နှင့်ကျပန်း string ကိုအသုံးပြု။ အစည်းအဝေးများထုတ်လုပ်ပါ ID</span></span><span>
</span><span><span class="hljs-variable">$randomString</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>)); </span><span><span class="hljs-comment">// အမှတ်မဲ့ဖြစ်သော16ဒရယ်</span></span><span>
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>(); </span><span><span class="hljs-comment">// လက်ရှိ timestamp</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$randomString</span></span><span> . </span><span><span class="hljs-variable">$timestamp</span></span><span>); </span><span><span class="hljs-comment">// အသုံးပြု SHA-256 ဟက်ရှုပ်</span></span><span>
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$id</span></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
</span><span><span class="hljs-comment">// မှန်ကေြင်းဝန်ခံ ID ပုံစံသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီမှုရှိမရှိ(တိကျတဲ့လိုအပ်ချက်များအရသိရသည်ပြုပြင်မွမ်းမံနိုင်ပါတယ်)</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^[a-f0-9]{64}$/'</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>); </span><span><span class="hljs-comment">// SHA-256 အရှည်သည် 64 လူသူမ</span></span><span>
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">updateId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$id</span></span></span><span>): </span><span><span class="hljs-title">void</span></span><span> {
</span><span><span class="hljs-comment">// update session ကို ID(ဥပမာအားဖြင့်,အသစ် ID ဒေတာဘေ့စ်သို့မဟုတ် cache ကိုရန်)</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'session_id'</span></span><span>] = </span><span><span class="hljs-variable">$id</span></span><span>; </span><span><span class="hljs-comment">// ဒီမှာရိုးရှင်းသောအကောင်အထည်ဖော်မှုဖြစ်ပါတယ်</span></span><span>
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
GenerateID () - 16-byte ကျပန်း string ကိုထုတ်လုပ်ရန်အတွက် ကျပန်း [) function ကိုသုံးပါ။ ထို့နောက်၎င်းကိုလက်ရှိ timestamp ဖြင့်ပြုလုပ်ပါ ။
RollateID ($ ID) - Sha-256 format နှင့်ကိုက်ညီမှုအရ 64 ဇာတ်ကောင် hexadecimal string ဖြစ်ကြောင်းအတည်ပြုရုံသာအတည်ပြုပါ။
UpdateID ($ ID) - session id ၏သိုလှောင်မှုတည်နေရာကိုသတ်သတ်မှတ်မှတ်လိုအပ်ချက်များနှင့်အညီအသစ်ပြောင်းနိုင်သည်။
PHP တွင်စိတ်ကြိုက် seatIbinterface မီးစက်ကိုအသုံးပြုခြင်းသည်အလွန်ရိုးရှင်းပါသည်။ Custom Session ID Generator ကိုမှတ်ပုံတင်ရန် session_set_saver_handler () function ကိုသာခေါ်ဆိုပါ။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(
</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">SecureSessionIdGenerator</span></span><span>(), </span><span><span class="hljs-comment">// တစ် ဦး ထုံးစံမီးစက်အတွက်ဖြတ်သန်း</span></span><span>
</span><span><span class="hljs-literal">true</span></span><span> </span><span><span class="hljs-comment">// session life cycle အပြောင်းအလဲနဲ့ဖွင့်ပါ</span></span><span>
);
</span><span><span class="hljs-comment">// session တစ်ခုစတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
ယခုအချိန်တွင် PHP သည် session id ကိုထုတ်လုပ်ရန်နှင့်စစ်ဆေးရန် SecuresessionIDERITER အတန်းကိုအသုံးပြုလိမ့်မည်။
Session ID ကိုယ်တိုင်ကစိတ်ကြိုက် session ID Generator မှကာကွယ်နိုင်သော်လည်းအစည်းအဝေးအချက်အလက်များအားအကာအကွယ်သည်အညီအမျှအရေးပါသည်။ လုံခြုံရေးတိုးမြှင့်ရေးအတွက် session data များကိုစာဝှက်နိုင်သည်။ PHP တွင်ဒေတာ encryption နှင့် decryption ကို OpenssSl_encrypt () OpenSSL_Decrypt () လုပ်ဆောင်ချက်များကိုဖြင့်ရရှိနိုင်သည်။
Session Data data data for encrypting နှင့် decrypt လုပ်ရန်နမူနာကုဒ်ဖြစ်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'ENCRYPTION_KEY'</span></span><span>, </span><span><span class="hljs-string">'your-encryption-key'</span></span><span>); </span><span><span class="hljs-comment">// သော့(请အသုံးပြု安全的方式存储)</span></span><span>
</span><span><span class="hljs-comment">// session data ကို encrypt</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">encrypt_session_data</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$data</span></span></span><span>) {
</span><span><span class="hljs-variable">$iv</span></span><span> = </span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-title function_ invoke__">openssl_cipher_iv_length</span></span><span>(</span><span><span class="hljs-string">'aes-256-cbc'</span></span><span>));
</span><span><span class="hljs-variable">$encrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">openssl_encrypt</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-string">'aes-256-cbc'</span></span><span>, ENCRYPTION_KEY, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$iv</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">base64_encode</span></span><span>(</span><span><span class="hljs-variable">$iv</span></span><span> . </span><span><span class="hljs-variable">$encrypted</span></span><span>); </span><span><span class="hljs-comment">// အဖဲှ့ပေါင်း IV နှင့်စာဝှက်ထားတဲ့ဒေတာနှင့်ပြန်လာ</span></span><span>
}
</span><span><span class="hljs-comment">// decrypt session ကိုဒေတာ</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">decrypt_session_data</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$encryptedData</span></span></span><span>) {
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base64_decode</span></span><span>(</span><span><span class="hljs-variable">$encryptedData</span></span><span>);
</span><span><span class="hljs-variable">$ivLength</span></span><span> = </span><span><span class="hljs-title function_ invoke__">openssl_cipher_iv_length</span></span><span>(</span><span><span class="hljs-string">'aes-256-cbc'</span></span><span>);
</span><span><span class="hljs-variable">$iv</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$ivLength</span></span><span>);
</span><span><span class="hljs-variable">$encrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-variable">$ivLength</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">openssl_decrypt</span></span><span>(</span><span><span class="hljs-variable">$encrypted</span></span><span>, </span><span><span class="hljs-string">'aes-256-cbc'</span></span><span>, ENCRYPTION_KEY, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$iv</span></span><span>);
}
</span><span><span class="hljs-comment">// 存储session data ကို encrypt</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">encrypt_session_data</span></span><span>(</span><span><span class="hljs-string">'Sensitive Information'</span></span><span>);
</span><span><span class="hljs-comment">// စာဝှက်ဖြည့်ထားသော session data ကိုဖတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$decryptedData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">decrypt_session_data</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>]);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
encrypt_session_Data ($ ဒေတာ) - ဒေတာများကိုစာဝှက်ရန်နှင့်စာဝှက်ထားသည့်ဒေတာများကိုပြန်ပို့ရန် AEE 256-CBC algorithm ကိုသုံးပါ။
Decrypt_Session_Data ($ encryptata) : စာဝှက်ထားတဲ့အချက်အလက်များကိုစာဝှက်ထားတဲ့အချက်အလက်တွေကိုစာဝှက်ဖြည်ထားတဲ့အချက်အလက်တွေကိုစာဝှက်ဖြည်ပေးလိုက်တယ်။
encryption key management : encryption keys (ဥပမာ Encryption_Key ) ကိုစနစ်တကျကတော့ code ထဲမှာရှောင်ရှားဖို့စနစ်တကျသိမ်းထားရမယ်။ သူတို့ကိုသိုလှောင်ရန်ပတ် 0 န်းကျင်ဆိုင်ရာ variable များကိုသို့မဟုတ် configuration ဖိုင်များကိုအသုံးပြုရန်အကြံပြုသည်။
Session ID ၏အသစ်ပြောင်းခြင်း - အသုံးပြုသူ authentication တစ်ခုစီသည်အောင်မြင်သောအခါ, session fixation တိုက်ခိုက်မှုများမှကာကွယ်ရန် session ID ကို update လုပ်ရန်အကောင်းဆုံးဖြစ်သည်။
Secure Session သိုလှောင်မှု - Session Data သိုလှောင်မှုတည်နေရာ (ဥပမာစာဝှက်ထားသောဒေတာဘေ့စ်သို့မဟုတ် cache system ကိုအသုံးပြုခြင်း) ကိုသေချာစေရန်သေချာစေပါ။
HTTPS : 0 က်ဘ်ဆိုက်သည် 0 န်ဆောင်မှုခံယူသူနှင့်ဆာဗာအကြားဆက်သွယ်မှုကို encrypt လုပ်ရန် HTTPS ကိုအသုံးပြုကြောင်းသေချာစေပါ။