ይህ መመሪያ የእርስዎን ክፍለ -ጊዜዎች ደህንነቱ በተጠበቀ ሁኔታ በ mySQL የውሂብ ጎታ ውስጥ እንዴት ማከማቸት እንደሚችሉ ያሳየዎታል። እንዲሁም ወደ የውሂብ ጎታ ውስጥ የሚገቡትን ሁሉንም የክፍለ-ጊዜ መረጃዎች ኢንክሪፕት እናደርጋለን ፣ ይህ ማለት ማንኛውም ሰው ወደ የውሂብ ጎታ ውስጥ መጥለፍ ከቻለ ሁሉም የክፍለ-ጊዜ መረጃዎች በ 256-ቢት AES ምስጠራ የተመሰጠረ ነው።
ደረጃዎች
ዘዴ 1 ከ 3: የ MySQL ዳታቤዝ ያዋቅሩ
ደረጃ 1. የ MySQL ዳታቤዝ ይፍጠሩ።
በዚህ መመሪያ ውስጥ “Secure_sessions” የሚባል የውሂብ ጎታ እንፈጥራለን።
እንዴት የውሂብ ጎታ-በ-phpMyAdmin መፍጠር እንደሚቻል ይመልከቱ።
ወይም ከዚህ በታች ያለውን የ SQL ኮድ መጠቀም ይችላሉ አንድ ይፈጥራል።
የውሂብ ጎታ ኮድ ይፍጠሩ ፦
ዳታቤዝ ‹ደህንነቱ የተጠበቀ_ ክፍለ -ጊዜዎች› ይፍጠሩ ፤
ማሳሰቢያ -አንዳንድ የአስተናጋጅ አገልግሎቶች በ phpMyAdmin በኩል የውሂብ ጎታ እንዲፈጥሩ አይፈቅዱልዎትም ፣ በ cPanel ውስጥ እንዴት ማድረግ እንደሚችሉ ይወቁ።
ደረጃ 2. የመምረጥ ፣ የማስገባትና መሰረዝ ልዩ መብቶችን ብቻ የያዘ ተጠቃሚን ይፍጠሩ።
ይህ ማለት በስክሪፕታችን ውስጥ የደህንነት ጥሰት ከነበረ ጠላፊው ሰንጠረ tablesችን ከመረጃ ቋታችን ውስጥ መጣል አይችልም ማለት ነው። በእውነቱ ፓራኖይድ ከሆኑ ለእያንዳንዱ ተግባር የተለየ ተጠቃሚ ይፍጠሩ።
-
ተጠቃሚ ፦
"ሰከንድ_ተጠቃሚ"
-
ፕስወርድ:
"eKcGZr59zAa2BEWU"
የተጠቃሚ ኮድ ይፍጠሩ ፦
ተጠቃሚን 'sec_user'@'localhost' በ 'eKcGZr59zAa2BEWU' መለየት; ግራንት ምረጥ ፣ አስገባ ፣ አዘምን ፣ በ “ደህንነቱ የተጠበቀ_ ክፍለ -ጊዜዎች” ላይ ሰርዝ።
ማሳሰቢያ - በራስዎ አገልጋይ ላይ ሲሰሩ ከላይ ባለው ኮድ ውስጥ የይለፍ ቃሉን መለወጥ ጥሩ ሀሳብ ነው። (የ PHP ኮድዎን መለወጥዎን ያረጋግጡ።) ያስታውሱ የይለፍ ቃል መሆን አያስፈልገውም ስለዚህ ማድረግ በተቻለ መጠን የተወሳሰበ ነው። የዘፈቀደ የይለፍ ቃል አመንጪ እዚህ አለ።
ደረጃ 3. “ክፍለ -ጊዜዎች” የሚባል የ MySQL ሰንጠረዥ ይፍጠሩ።
ከዚህ በታች ያለው ኮድ 4 መስኮች (መታወቂያ ፣ set_time ፣ ውሂብ ፣ ክፍለ ጊዜ_ቁልፍ) ያለው ሠንጠረዥ ይፈጥራል።
የ “ክፍለ ጊዜዎች” ሰንጠረዥን ይፍጠሩ
ሠንጠረዥ 'ክፍለ ጊዜዎች' ('id` char (128) NOTUL,' set_time` char (10) NULL ') ፣' data` text NOTUL, 'session_key` char (128) NULL, PRIMARY ቁልፍ (' id`)) ENGINE = InnoDB DEFAULT CHARSET = latin1;
መስኮች “መታወቂያ” እና “ክፍለ_ቁልፍ” ሁል ጊዜ 128 ቁምፊዎች ርዝመት ስለሚኖራቸው የ CHAR የውሂብ ዓይነትን ለምናውቃቸው መስኮች እንጠቀማለን። እዚህ CHAR ን መጠቀም በሂደት ኃይል ላይ ይቆጥባል።
ዘዴ 2 ከ 3: session.class.php ፋይል ይፍጠሩ
ደረጃ 1. ክፍል ይፍጠሩ።
አዲስ ክፍል ለመጀመር ከዚህ በታች ያለውን ኮድ ማስገባት ያስፈልግዎታል
አዲስ ክፍል ፦
የክፍል ክፍለ ጊዜ {
ደረጃ 2. _ ግንባታ ተግባርን ይፍጠሩ።
የ ‹ክፍለ -ጊዜ› ክፍልን በመጠቀም አዲስ የነገር ምሳሌን በፈጠርን ቁጥር ይህ ተግባር ይጠራል። በ PHP _construct ተግባር ላይ እዚህ ማንበብ ይችላሉ።
ይህ ተግባር የእኛን ብጁ ክፍለ ጊዜ ተቆጣጣሪ ያዘጋጃል ስለዚህ ክፍሉ ወዲያውኑ እንደተጀመረ (ማለትም ፣ የተሰራ/የተገነባ/የተገነባ)።
_ የግንባታ ተግባር:
ተግባር _construct () {// የእኛን ብጁ ክፍለ ጊዜ ተግባራት ያዘጋጁ። session_set_save_handler (ድርድር ($ ይህ ፣ 'ክፍት')) ፣ ድርድር ($ ይህ ፣ 'ዝጋ') ፣ ድርድር ($ ይህ ፣ 'አንብብ') ፣ ድርድር ($ ይህ ፣ 'ጻፍ') ፣ ድርድር ($ ይህ ፣ 'አጥፋ')) ፣ ድርድር ($ ይህ ፣ 'gc')); // ይህ መስመር ዕቃዎችን እንደ ማዳን ተቆጣጣሪዎች ሲጠቀሙ ያልተጠበቁ ውጤቶችን ይከላከላል። መዝገብ_መዝጋት_አሠራር ('ክፍለ -ጊዜ_ጽፍ_ዘጉ'); }
ደረጃ 3. የ start_session ተግባርን ይፍጠሩ።
አዲስ ክፍለ -ጊዜ ለመጀመር በፈለጉ ቁጥር ይህ ተግባር ይጠራል ፣ ከ session_start () ይልቅ ይጠቀሙበት። እያንዳንዱ መስመር የሚያደርገውን ለማየት በኮዱ ውስጥ ያሉትን አስተያየቶች ይመልከቱ።
የ start_session ተግባር ፦
ተግባር start_session ($ session_name ፣ $ ደህንነቱ የተጠበቀ) {// የክፍለ -ጊዜው ኩኪ በጃቫስክሪፕት ተደራሽ አለመሆኑን ያረጋግጡ። $ httponly = እውነት; // ለክፍለ -ጊዜው ለመጠቀም ሃሽ ስልተ ቀመር። (የሚገኙትን ሃሽዎች ዝርዝር ለማግኘት hash_algos () ይጠቀሙ)። $ session_hash = 'sha512'; // ሃሽ የሚገኝ ከሆነ ያረጋግጡ (in_array ($ session_hash ፣ hash_algos ())) {// የእሱን ተግባር ያዘጋጁ። ini_set ('session.hash_function' ፣ $ session_hash) ፤ } // በአንድ የሃሽ ባህርይ ስንት ቢት። // ሊሆኑ የሚችሉ እሴቶች '4' (0-9 ፣ a-f) ፣ '5' (0-9 ፣ a-v) እና '6' (0-9 ፣ a-z ፣ A-Z ፣ "-", ",") ናቸው። ini_set ('session.hash_bits_per_character' ፣ 5) ፤ // የዩአርኤል ተለዋዋጮችን ሳይሆን ኩኪዎችን ብቻ እንዲጠቀም ክፍለ -ጊዜውን ያስገድዱት። ini_set ('session.use_only_cookies' ፣ 1) ፤ // የክፍለ -ጊዜ ኩኪ ልኬቶችን ያግኙ $ cookieParams = session_get_cookie_params (); // ግቤቶችን ያዘጋጁ session_set_cookie_params ($ cookieParams ["የህይወት ዘመን"] ፣ $ cookieParams ["ዱካ"] ፣ $ cookieParams ["ጎራ"] ፣ $ ደህንነቱ የተጠበቀ ፣ $ httponly); // የክፍለ ጊዜውን ስም ክፍለ -ጊዜ ስም ($ session_name) ይለውጡ ፤ // አሁን እኛ የድመት ክፍለ -ጊዜውን ክፍለ -ጊዜ () ን እንጀምራለን (); // ይህ መስመር ክፍለ -ጊዜውን ያድሳል እና አሮጌውን ይሰርዛል። // እንዲሁም በመረጃ ቋቱ ውስጥ አዲስ የምስጠራ ቁልፍን ያመነጫል። ክፍለ -ጊዜ_አድሶ_ኢድ (እውነት); }
ደረጃ 4. ክፍት ተግባር ይፍጠሩ።
አዲስ ክፍለ -ጊዜ ስንጀምር ይህ ተግባር በ PHP ክፍለ -ጊዜዎች ይጠራል ፣ አዲስ የውሂብ ጎታ ግንኙነት ለመጀመር እንጠቀምበታለን።
ክፍት ተግባር:
ተግባር ክፍት () {$ host = 'localhost'; $ ተጠቃሚ = 'sec_user'; $ pass = 'eKcGZr59zAa2BEWU'; $ name = 'secure_sessions'; $ mysqli = አዲስ mysqli ($ አስተናጋጅ ፣ $ ተጠቃሚ ፣ $ ማለፊያ ፣ $ ስም); $ this-> db = $ mysqli; እውነት ተመለስ; }
ደረጃ 5. የቅርብ ተግባርን ይፍጠሩ።
ክፍለ -ጊዜዎቹ መዘጋት ሲፈልጉ ይህ ተግባር ይጠራል።
የቅርብ ተግባር:
ተግባር ቅርብ () {$ this-> db-> close (); እውነት ተመለስ; }
ደረጃ 6. የንባብ ተግባርን ይፍጠሩ።
እኛ ‹$ _SESSION ['የሆነ ነገር'] ን ስንጠቀም ለምሳሌ አንድን ክፍለ ጊዜ ለመድረስ ስንሞክር ይህ ተግባር በ PHP ይጠራል።. በአንድ ገጽ ላይ ለዚህ ተግባር ብዙ ጥሪዎች ሊኖሩ ስለሚችሉ ፣ ለደህንነት ብቻ ሳይሆን ለአፈጻጸምም የተዘጋጁ መግለጫዎችን እንጠቀማለን። መግለጫውን አንድ ጊዜ ብቻ እናዘጋጃለን ከዚያም ብዙ ጊዜ ልንፈጽመው እንችላለን።
እንዲሁም በመረጃ ቋቱ ውስጥ የተመሰጠረውን የክፍለ -ጊዜ ውሂብ ዲክሪፕት እናደርጋለን። በክፍለ-ጊዜዎቻችን ውስጥ 256-ቢት AES ምስጠራን እየተጠቀምን ነው።
የንባብ ተግባር;
ተግባር አንብብ ($ መታወቂያ) {ከሆነ (! isset ($ this-> read_stmt)) {$ this-> read_stmt = $ this-> db-> አዘጋጅ («መረጃን ከክፍለ-ጊዜዎች ምረጥ ID =? LIMIT 1») ፤ } $ this-> read_stmt-> bind_param ('s' ፣ $ id) ፤ $ this-> read_stmt-> execute (); $ this-> read_stmt-> store_result (); $ this-> read_stmt-> bind_result ($ ውሂብ); $ this-> read_stmt-> አምጣ (); $ key = $ this-> getkey ($ id); $ data = $ this-> ዲክሪፕት ($ ውሂብ ፣ $ ቁልፍ); $ ውሂብ ይመልሱ; }
ደረጃ 7. የመፃፍ ተግባርን ይፍጠሩ።
ለአንድ ተግባር አንድ እሴት ስንመድብ ይህ ተግባር ጥቅም ላይ ይውላል ፣ ለምሳሌ $ _SESSION ['የሆነ ነገር'] = 'ሌላ ነገር' ፤. ተግባሩ ወደ የውሂብ ጎታ ውስጥ የሚገባውን ሁሉንም ውሂብ ኢንክሪፕት ያደርጋል።
የመፃፍ ተግባር;
ተግባር ይፃፉ ($ id ፣ $ data) {// ልዩ ቁልፍ ያግኙ $ key = $ this-> getkey ($ id); // ውሂቡን ኢንክሪፕት ያድርጉ $ data = $ this-> ኢንክሪፕት ($ ውሂብ ፣ $ ቁልፍ) ፤ $ ጊዜ = ጊዜ (); ከሆነ (! isset ($ this-> w_stmt)) {$ this-> w_stmt = $ this-> db-> አዘጋጅ ("በክፍለ-ጊዜዎች ውስጥ ይተኩ (መታወቂያ ፣ ሰዓት_ጊዜ ፣ ውሂብ ፣ ክፍለ-ጊዜ_ቁልፍ) እሴቶች (?,?,?,?) "); } $ this-> w_stmt-> bind_param ('siss' ፣ $ id ፣ $ time ፣ $ data ፣ $ key) ፤ $ this-> w_stmt-> ማስፈጸም (); እውነት ተመለስ; }
ደረጃ 8. የማፍረስ ተግባርን ይፍጠሩ።
ይህ ተግባር ክፍለ -ጊዜውን ከመረጃ ቋቱ ይሰርዛል ፣ እንደ ክፍለ ጊዜ_destroy () ያሉ ተግባሮችን ስንጠራ በ php ጥቅም ላይ ይውላል።
ተግባርን ማጥፋት;
ተግባር አጥፋ ($ መታወቂያ) {ከሆነ (! isset ($ this-> delete_stmt)) {$ this-> delete_stmt = $ this-> db-> አዘጋጅ («ከክፍለ-ጊዜዎች ሰርዝ ID =?»); } $ this-> delete_stmt-> bind_param ('s' ፣ $ id) ፤ $ this-> delete_stmt-> execute (); እውነት ተመለስ; }
ደረጃ 9. የ gc (የቆሻሻ ሰብሳቢ) ተግባርን ይፍጠሩ።
ይህ ተግባር የቆዩ ክፍለ ጊዜዎችን ለመሰረዝ የሚጠራው የቆሻሻ ሰብሳቢው ተግባር ነው። ይህ ተግባር የተጠራበት ድግግሞሽ በሁለት የውቅረት መመሪያዎች ፣ ክፍለ -ጊዜ.gc_probability እና session.gc_divisor ይወሰናል።
gc () ተግባር
ተግባር gc ($ max) {if (! isset ($ this-> gc_stmt)) {$ this-> gc_stmt = $ this-> db-> አዘጋጅ («set_time <?» ካሉበት ክፍለ ጊዜዎች ይሰርዙ); } $ old = time () - $ max; $ this-> gc_stmt-> bind_param ('s' ፣ $ old) ፤ $ this-> gc_stmt-> ማስፈጸም (); እውነት ተመለስ; }
ደረጃ 10. የ getKey ተግባርን ይፍጠሩ።
ይህ ተግባር ከክፍለ -ጊዜዎች ሠንጠረዥ የምስጠራ ልዩ ቁልፍን ለማግኘት ያገለግላል። ክፍለ -ጊዜ ከሌለ ለምስጠራ አዲስ የዘፈቀደ ቁልፍ ብቻ ይመልሳል።
getkey () ተግባር:
የግል ተግባር getkey ($ id) {if (! isset ($ this-> key_stmt)) {$ this-> key_stmt = $ this-> db-> አዘጋጅ («ክፍለ-ጊዜን ይምረጡ ከክፍለ-ጊዜው WH =? LIMIT 1»); } $ this-> key_stmt-> bind_param ('s' ፣ $ id) ፤ $ this-> key_stmt-> ማስፈጸም (); $ this-> key_stmt-> store_result (); ከሆነ ($ this-> key_stmt-> num_rows == 1) {$ this-> key_stmt-> bind_result ($ key); $ this-> key_stmt-> አምጣ (); $ ቁልፍን ይመልሱ ፤ } ሌላ {$ random_key = ሃሽ ('sha512' ፣ uniqid (mt_rand (1 ፣ mt_getrandmax ()) ፣ እውነት))); $ random_key ን ይመልሱ; }}
ደረጃ 11. ኢንክሪፕት እና ዲክሪፕት ተግባሮችን ይፍጠሩ።
እነዚህ ተግባራት የክፍለ -ጊዜዎቹን ውሂብ ኢንክሪፕት ያደርጋሉ ፣ ለእያንዳንዱ ክፍለ -ጊዜ ከሚለያይ የውሂብ ጎታ የኢንክሪፕሽን ቁልፍ ይጠቀማሉ። ያንን ቁልፍ በቀጥታ በኢንክሪፕሽን ውስጥ አንጠቀምም ነገር ግን የቁልፍ ሃሽውን የበለጠ የዘፈቀደ ለማድረግ እንጠቀምበታለን።
ኢንክሪፕት () እና ዲክሪፕት () ተግባራት
የግል ተግባር ኢንክሪፕት ($ ውሂብ ፣ $ ቁልፍ) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39 = E@rAsp7c-Ph@pH'; $ key = substr (ሃሽ ('sha256' ፣ $ ጨው። $ ቁልፍ። $ ጨው) ፣ 0 ፣ 32) ፤ $ iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256 ፣ MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv ($ iv_size ፣ MCRYPT_RAND); $ ኢንክሪፕት = base64_encode (mcrypt_encrypt (MCRYPT_RIJNDAEL_256 ፣ $ ቁልፍ ፣ $ ውሂብ ፣ MCRYPT_MODE_ECB ፣ $ iv)); የተመሳጠረ $ ይመልሱ ፤ } የግል ተግባር ዲክሪፕት ($ ውሂብ ፣ $ ቁልፍ) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39 = E@rAsp7c-Ph@pH'; $ key = substr (ሃሽ ('sha256' ፣ $ ጨው። $ ቁልፍ። $ ጨው) ፣ 0 ፣ 32) ፤ $ iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256 ፣ MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv ($ iv_size ፣ MCRYPT_RAND); $ ዲክሪፕት = mcrypt_decrypt (MCRYPT_RIJNDAEL_256 ፣ $ key ፣ base64_decode ($ data) ፣ MCRYPT_MODE_ECB ፣ $ iv); $ ዲክሪፕት = rtrim ($ ዲክሪፕት የተደረገ ፣ "\ 0"); $ ዲክሪፕት ተመለስ; }
ደረጃ 12. የመጨረሻ ክፍል።
እዚህ ትምህርቶችን የሚሽከረከሩ ቅንፎችን ብቻ እናጠናቅቃለን-
የመጨረሻ ክፍል ፦
}
ዘዴ 3 ከ 3 ከክፍለ -ጊዜዎች ጋር ገጾችን መፍጠር
ደረጃ 1. ከብጁ ክፍለ ጊዜ አስተዳዳሪ ጋር ክፍለ -ጊዜዎችን መጠቀም።
አዲስ ክፍለ ጊዜ እንዴት እንደሚጀምሩ ከዚህ በታች ነው። ክፍለ -ጊዜዎቹን ለመድረስ በሚፈልጉት እያንዳንዱ ገጽ ላይ ይህንን ማካተት ያስፈልግዎታል ፣ ከክፍለ -ጊዜ () ይልቅ ይጠቀሙበት ፤
ክፍለ ጊዜ በመጀመር ላይ ፦
ይጠይቃል ('session.class.php'); $ ክፍለ ጊዜ = አዲስ ክፍለ ጊዜ (); // https $ session-> start_session ('_ s' ፣ ሐሰት) የሚጠቀሙ ከሆነ ወደ እውነት ይዋቀራል ፤ $ _SESSION ['የሆነ ነገር'] = 'እሴት'። አስተጋባ $ _SESSION ['የሆነ ነገር'];