በ PHP እና በ MySQL ውስጥ ደህንነቱ የተጠበቀ የክፍለ -ጊዜ አስተዳደር ስርዓት ለመፍጠር 3 መንገዶች

ዝርዝር ሁኔታ:

በ PHP እና በ MySQL ውስጥ ደህንነቱ የተጠበቀ የክፍለ -ጊዜ አስተዳደር ስርዓት ለመፍጠር 3 መንገዶች
በ PHP እና በ MySQL ውስጥ ደህንነቱ የተጠበቀ የክፍለ -ጊዜ አስተዳደር ስርዓት ለመፍጠር 3 መንገዶች

ቪዲዮ: በ PHP እና በ MySQL ውስጥ ደህንነቱ የተጠበቀ የክፍለ -ጊዜ አስተዳደር ስርዓት ለመፍጠር 3 መንገዶች

ቪዲዮ: በ PHP እና በ MySQL ውስጥ ደህንነቱ የተጠበቀ የክፍለ -ጊዜ አስተዳደር ስርዓት ለመፍጠር 3 መንገዶች
ቪዲዮ: ሸሚዝ ለመቁረጥ በመጀመሪያ pattern አወጣጥ ለጀማሪዎች#@ First pattern design for beginners to cut a shirt 2024, ሚያዚያ
Anonim

ይህ መመሪያ የእርስዎን ክፍለ -ጊዜዎች ደህንነቱ በተጠበቀ ሁኔታ በ mySQL የውሂብ ጎታ ውስጥ እንዴት ማከማቸት እንደሚችሉ ያሳየዎታል። እንዲሁም ወደ የውሂብ ጎታ ውስጥ የሚገቡትን ሁሉንም የክፍለ-ጊዜ መረጃዎች ኢንክሪፕት እናደርጋለን ፣ ይህ ማለት ማንኛውም ሰው ወደ የውሂብ ጎታ ውስጥ መጥለፍ ከቻለ ሁሉም የክፍለ-ጊዜ መረጃዎች በ 256-ቢት AES ምስጠራ የተመሰጠረ ነው።

ደረጃዎች

ዘዴ 1 ከ 3: የ MySQL ዳታቤዝ ያዋቅሩ

2238751 1
2238751 1

ደረጃ 1. የ MySQL ዳታቤዝ ይፍጠሩ።

በዚህ መመሪያ ውስጥ “Secure_sessions” የሚባል የውሂብ ጎታ እንፈጥራለን።

እንዴት የውሂብ ጎታ-በ-phpMyAdmin መፍጠር እንደሚቻል ይመልከቱ።

ወይም ከዚህ በታች ያለውን የ SQL ኮድ መጠቀም ይችላሉ አንድ ይፈጥራል።

የውሂብ ጎታ ኮድ ይፍጠሩ ፦

ዳታቤዝ ‹ደህንነቱ የተጠበቀ_ ክፍለ -ጊዜዎች› ይፍጠሩ ፤

ማሳሰቢያ -አንዳንድ የአስተናጋጅ አገልግሎቶች በ phpMyAdmin በኩል የውሂብ ጎታ እንዲፈጥሩ አይፈቅዱልዎትም ፣ በ cPanel ውስጥ እንዴት ማድረግ እንደሚችሉ ይወቁ።

2238751 2
2238751 2

ደረጃ 2. የመምረጥ ፣ የማስገባትና መሰረዝ ልዩ መብቶችን ብቻ የያዘ ተጠቃሚን ይፍጠሩ።

ይህ ማለት በስክሪፕታችን ውስጥ የደህንነት ጥሰት ከነበረ ጠላፊው ሰንጠረ tablesችን ከመረጃ ቋታችን ውስጥ መጣል አይችልም ማለት ነው። በእውነቱ ፓራኖይድ ከሆኑ ለእያንዳንዱ ተግባር የተለየ ተጠቃሚ ይፍጠሩ።

  • ተጠቃሚ ፦

    "ሰከንድ_ተጠቃሚ"

  • ፕስወርድ:

    "eKcGZr59zAa2BEWU"

የተጠቃሚ ኮድ ይፍጠሩ ፦

ተጠቃሚን 'sec_user'@'localhost' በ 'eKcGZr59zAa2BEWU' መለየት; ግራንት ምረጥ ፣ አስገባ ፣ አዘምን ፣ በ “ደህንነቱ የተጠበቀ_ ክፍለ -ጊዜዎች” ላይ ሰርዝ።

ማሳሰቢያ - በራስዎ አገልጋይ ላይ ሲሰሩ ከላይ ባለው ኮድ ውስጥ የይለፍ ቃሉን መለወጥ ጥሩ ሀሳብ ነው። (የ PHP ኮድዎን መለወጥዎን ያረጋግጡ።) ያስታውሱ የይለፍ ቃል መሆን አያስፈልገውም ስለዚህ ማድረግ በተቻለ መጠን የተወሳሰበ ነው። የዘፈቀደ የይለፍ ቃል አመንጪ እዚህ አለ።

2238751 3
2238751 3

ደረጃ 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 ፋይል ይፍጠሩ

2238751 4
2238751 4

ደረጃ 1. ክፍል ይፍጠሩ።

አዲስ ክፍል ለመጀመር ከዚህ በታች ያለውን ኮድ ማስገባት ያስፈልግዎታል

አዲስ ክፍል ፦

የክፍል ክፍለ ጊዜ {

2238751 5
2238751 5

ደረጃ 2. _ ግንባታ ተግባርን ይፍጠሩ።

የ ‹ክፍለ -ጊዜ› ክፍልን በመጠቀም አዲስ የነገር ምሳሌን በፈጠርን ቁጥር ይህ ተግባር ይጠራል። በ PHP _construct ተግባር ላይ እዚህ ማንበብ ይችላሉ።

ይህ ተግባር የእኛን ብጁ ክፍለ ጊዜ ተቆጣጣሪ ያዘጋጃል ስለዚህ ክፍሉ ወዲያውኑ እንደተጀመረ (ማለትም ፣ የተሰራ/የተገነባ/የተገነባ)።

_ የግንባታ ተግባር:

ተግባር _construct () {// የእኛን ብጁ ክፍለ ጊዜ ተግባራት ያዘጋጁ። session_set_save_handler (ድርድር ($ ይህ ፣ 'ክፍት')) ፣ ድርድር ($ ይህ ፣ 'ዝጋ') ፣ ድርድር ($ ይህ ፣ 'አንብብ') ፣ ድርድር ($ ይህ ፣ 'ጻፍ') ፣ ድርድር ($ ይህ ፣ 'አጥፋ')) ፣ ድርድር ($ ይህ ፣ 'gc')); // ይህ መስመር ዕቃዎችን እንደ ማዳን ተቆጣጣሪዎች ሲጠቀሙ ያልተጠበቁ ውጤቶችን ይከላከላል። መዝገብ_መዝጋት_አሠራር ('ክፍለ -ጊዜ_ጽፍ_ዘጉ'); }

2238751 6
2238751 6

ደረጃ 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) ይለውጡ ፤ // አሁን እኛ የድመት ክፍለ -ጊዜውን ክፍለ -ጊዜ () ን እንጀምራለን (); // ይህ መስመር ክፍለ -ጊዜውን ያድሳል እና አሮጌውን ይሰርዛል። // እንዲሁም በመረጃ ቋቱ ውስጥ አዲስ የምስጠራ ቁልፍን ያመነጫል። ክፍለ -ጊዜ_አድሶ_ኢድ (እውነት); }

2238751 7
2238751 7

ደረጃ 4. ክፍት ተግባር ይፍጠሩ።

አዲስ ክፍለ -ጊዜ ስንጀምር ይህ ተግባር በ PHP ክፍለ -ጊዜዎች ይጠራል ፣ አዲስ የውሂብ ጎታ ግንኙነት ለመጀመር እንጠቀምበታለን።

ክፍት ተግባር:

ተግባር ክፍት () {$ host = 'localhost'; $ ተጠቃሚ = 'sec_user'; $ pass = 'eKcGZr59zAa2BEWU'; $ name = 'secure_sessions'; $ mysqli = አዲስ mysqli ($ አስተናጋጅ ፣ $ ተጠቃሚ ፣ $ ማለፊያ ፣ $ ስም); $ this-> db = $ mysqli; እውነት ተመለስ; }

2238751 8
2238751 8

ደረጃ 5. የቅርብ ተግባርን ይፍጠሩ።

ክፍለ -ጊዜዎቹ መዘጋት ሲፈልጉ ይህ ተግባር ይጠራል።

የቅርብ ተግባር:

ተግባር ቅርብ () {$ this-> db-> close (); እውነት ተመለስ; }

2238751 9
2238751 9

ደረጃ 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-> ዲክሪፕት ($ ውሂብ ፣ $ ቁልፍ); $ ውሂብ ይመልሱ; }

2238751 10
2238751 10

ደረጃ 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-> ማስፈጸም (); እውነት ተመለስ; }

2238751 11
2238751 11

ደረጃ 8. የማፍረስ ተግባርን ይፍጠሩ።

ይህ ተግባር ክፍለ -ጊዜውን ከመረጃ ቋቱ ይሰርዛል ፣ እንደ ክፍለ ጊዜ_destroy () ያሉ ተግባሮችን ስንጠራ በ php ጥቅም ላይ ይውላል።

ተግባርን ማጥፋት;

ተግባር አጥፋ ($ መታወቂያ) {ከሆነ (! isset ($ this-> delete_stmt)) {$ this-> delete_stmt = $ this-> db-> አዘጋጅ («ከክፍለ-ጊዜዎች ሰርዝ ID =?»); } $ this-> delete_stmt-> bind_param ('s' ፣ $ id) ፤ $ this-> delete_stmt-> execute (); እውነት ተመለስ; }

2238751 12
2238751 12

ደረጃ 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-> ማስፈጸም (); እውነት ተመለስ; }

2238751 13
2238751 13

ደረጃ 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 ን ይመልሱ; }}

2238751 14
2238751 14

ደረጃ 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"); $ ዲክሪፕት ተመለስ; }

2238751 15
2238751 15

ደረጃ 12. የመጨረሻ ክፍል።

እዚህ ትምህርቶችን የሚሽከረከሩ ቅንፎችን ብቻ እናጠናቅቃለን-

የመጨረሻ ክፍል ፦

}

ዘዴ 3 ከ 3 ከክፍለ -ጊዜዎች ጋር ገጾችን መፍጠር

2238751 16
2238751 16

ደረጃ 1. ከብጁ ክፍለ ጊዜ አስተዳዳሪ ጋር ክፍለ -ጊዜዎችን መጠቀም።

አዲስ ክፍለ ጊዜ እንዴት እንደሚጀምሩ ከዚህ በታች ነው። ክፍለ -ጊዜዎቹን ለመድረስ በሚፈልጉት እያንዳንዱ ገጽ ላይ ይህንን ማካተት ያስፈልግዎታል ፣ ከክፍለ -ጊዜ () ይልቅ ይጠቀሙበት ፤

ክፍለ ጊዜ በመጀመር ላይ ፦

ይጠይቃል ('session.class.php'); $ ክፍለ ጊዜ = አዲስ ክፍለ ጊዜ (); // https $ session-> start_session ('_ s' ፣ ሐሰት) የሚጠቀሙ ከሆነ ወደ እውነት ይዋቀራል ፤ $ _SESSION ['የሆነ ነገር'] = 'እሴት'። አስተጋባ $ _SESSION ['የሆነ ነገር'];

የሚመከር: