Njia 3 za Kuunda Mfumo wa Usimamizi wa Kikao salama katika PHP na MySQL

Orodha ya maudhui:

Njia 3 za Kuunda Mfumo wa Usimamizi wa Kikao salama katika PHP na MySQL
Njia 3 za Kuunda Mfumo wa Usimamizi wa Kikao salama katika PHP na MySQL

Video: Njia 3 za Kuunda Mfumo wa Usimamizi wa Kikao salama katika PHP na MySQL

Video: Njia 3 za Kuunda Mfumo wa Usimamizi wa Kikao salama katika PHP na MySQL
Video: VITU 7 AMBAVYO HUPASWI KUFANYA KATIKA GARI LA MFUMO WA OTOMATIKI (Automatic) 2024, Aprili
Anonim

Mwongozo huu utakuonyesha jinsi unaweza kuhifadhi vikao vyako salama kwenye hifadhidata ya MySQL. Pia tutaficha data yote ya kikao inayoingia kwenye hifadhidata, ambayo inamaanisha ikiwa mtu yeyote ataweza kuingilia kwenye hifadhidata data yote ya kikao imefichwa kwa usimbuaji wa AES 256-bit.

Hatua

Njia 1 ya 3: Sanidi Hifadhidata ya MySQL

2238751 1
2238751 1

Hatua ya 1. Unda hifadhidata ya MySQL

Katika mwongozo huu tutaunda hifadhidata iitwayo "safe_sessions".

Tazama jinsi ya Unda-Hifadhidata-katika-phpMyAdmin.

Au unaweza kutumia nambari ya SQL hapa chini itakutengenezea moja.

Unda Nambari ya Hifadhidata:

Unda Database `salama_ vipindi`;

Kumbuka: Huduma zingine za kukaribisha hairuhusu kuunda hifadhidata kupitia phpMyAdmin, Jifunze jinsi ya kuifanya kwenye cPanel.

2238751 2
2238751 2

Hatua ya 2. Unda mtumiaji na marupurupu ya CHAGUA, INSERT na FUTA tu

Hii inamaanisha kuwa ikiwa kulikuwa na ukiukaji wa usalama katika hati yetu, hacker hakuweza kuacha meza kutoka hifadhidata yetu. Ikiwa wewe ni mjanja kweli, tengeneza mtumiaji tofauti kwa kila kazi.

  • Mtumiaji:

    "sec_user"

  • Nenosiri:

    "eKcGZr59zAa2BEWU"

Unda Msimbo wa Mtumiaji:

BUNA MTUMIAJI 'sec_user' @ 'localhost' ILIYOTAMBULISHWA NA 'eKcGZr59zAa2BEWU'; TOA UCHAGUZI, WEKA, SASISHA, FUTA KWENYE salama_simu`. * KWA 'sec_user' @ 'localhost';

Kumbuka: Ni wazo nzuri kubadilisha nywila kwenye nambari iliyo hapo juu wakati unafanya kazi kwenye seva yako mwenyewe. (Hakikisha unabadilisha nambari yako ya PHP pia.) Kumbuka haiitaji kuwa nywila ambayo unaweza kukumbuka ili kutengeneza iwe ngumu iwezekanavyo. Hapa kuna jenereta ya nywila ya nasibu.

2238751 3
2238751 3

Hatua ya 3. Unda meza ya MySQL iitwayo "vikao"

Nambari iliyo hapa chini huunda meza na sehemu 4 (id, set_time, data, kikao_key).

Unda meza ya "vikao":

Unda TABLE `vikao` (` id` char (128) SI NULL, `set_time` char (10) NOT NULL,` data` text NOT NULL, `session_key` char (128) SI NULL, KIWANGO CHA MSINGI (` id`) INJINI = InnoDB DESA YA DEFAULT = latin1;

Tunatumia orodha ya data ya CHAR kwa sehemu ambazo tunajua urefu wa, kwani uwanja "id" na "kikao_key" kitakuwa na herufi 128 kila wakati. Kutumia CHAR hapa kunaokoa nguvu ya usindikaji.

Njia 2 ya 3: Unda faili ya kikao.class.php

2238751 4
2238751 4

Hatua ya 1. Unda Darasa

Kuanza darasa mpya utahitaji kuingiza nambari hapa chini:

Darasa Jipya:

kikao cha darasa {

2238751 5
2238751 5

Hatua ya 2. Unda _construct function

Kazi hii itaitwa kila wakati tunapounda tukio mpya la kitu kutumia darasa la 'kikao'. Unaweza kusoma juu ya kazi ya PHP _construct hapa.

Kazi hii inaweka mshughulikiaji wa kikao chetu cha kawaida ili ipatikane kwa matumizi mara tu darasa linapoimarishwa (yaani, kufanywa / kujengwa / kujengwa).

_ kazi ya ujenzi:

kazi _construct () {// weka kazi zetu za kikao cha kawaida. kikao_set_save_handler (safu ($ hii, 'fungua'), safu ($ hii, 'funga'), safu ($ hii, 'soma'), safu ($ hii, 'andika'), safu ($ hii,'angamiza '), safu ($ hii, 'gc')); // Mstari huu huzuia athari zisizotarajiwa wakati wa kutumia vitu kama washughulikiaji wa kuokoa. rejista_shutdown_function ('kikao_write_close'); }

2238751 6
2238751 6

Hatua ya 3. Unda kazi ya kuanza

Kazi hii itaitwa kila wakati unataka kuanza kikao kipya, tumia badala ya kikao_kianza ();. Tazama maoni kwenye nambari ili uone kila mstari unafanya nini.

start_session kazi:

kazi start_session ($ kikao_name, $ salama) {// Hakikisha kuki ya kikao haipatikani kupitia JavaScript. $ httponly = kweli; // Hash algorithm ya kutumia kwa kikao. (tumia hash_algos () kupata orodha ya hashes zilizopo.) $ session_hash = 'sha512'; // Angalia ikiwa hash inapatikana ikiwa (in_array ($ session_hash, hash_algos ())) {// Set has has function. ini_set ('kikao.hash_function', $ kikao_hash); } // Ni ngapi bits kwa kila tabia ya hashi. // Thamani zinazowezekana ni '4' (0-9, a-f), '5' (0-9, a-v), na '6' (0-9, a-z, A-Z, "-", ","). ini_set ('kikao.hash_bits_per_character', 5); // Lazimisha kikao kutumia kuki tu, sio anuwai za URL. ini_set ('kikao.tumia_kinyumba tu', 1); // Pata vigezo vya kuki za kikao $ cookieParams = session_get_cookie_params (); // Weka vigezo vya kikao_set_cookie_params ($ cookieParams ["maisha"], $ cookieParams ["njia"], $ cookieParams ["uwanja"], $ salama, $ http tu); // Badilisha jina la kikao kikao_name ($ kikao_name); // Sasa tunaanza paka kikao_kianza (); // Mstari huu hutengeneza kikao na kufuta ya zamani. // Pia hutengeneza ufunguo mpya wa usimbuaji katika hifadhidata. kikao_zaa upya_id (kweli); }

2238751 7
2238751 7

Hatua ya 4. Unda kazi wazi

Kazi hii itaitwa na vikao vya PHP tunapoanza kikao kipya, tunatumia kuanza unganisho jipya la hifadhidata.

kazi wazi:

kazi open () {$ host = 'localhost'; $ mtumiaji = 'sec_user'; $ kupita = 'eKcGZr59zAa2BEWU'; $ jina = 'salama_sessions'; $ mysqli = mysqli mpya (mwenyeji wa $, $ user, $ pass, $ name); $ hii-> db = $ mysqli; kurudi kweli; }

2238751 8
2238751 8

Hatua ya 5. Unda kazi ya karibu

Kazi hii itaitwa wakati vikao vinataka kufungwa.

kazi ya karibu:

fanya kazi karibu () {$ this-> db-> close (); kurudi kweli; }

2238751 9
2238751 9

Hatua ya 6. Unda kazi ya kusoma

Kazi hii itaitwa na PHP tunapojaribu kufikia kikao kwa mfano tunapotumia echo $ _SESSION ['something'];. Kwa sababu kunaweza kuwa na simu nyingi kwa kazi hii kwenye ukurasa mmoja, tunachukua faida ya taarifa zilizoandaliwa, sio tu kwa usalama lakini pia kwa utendaji pia. Tunatayarisha taarifa hiyo mara moja tu kisha tunaweza kuitekeleza mara nyingi.

Pia tunasimbua data ya kikao ambayo imesimbwa kwenye hifadhidata. Tunatumia usimbuaji wa AES 256-bit katika vikao vyetu.

soma kazi:

kazi soma ($ id) {if (! isset ($ this-> read_stmt)) {$ this-> read_stmt = $ this-> db-> andaa ("CHAGUA data KUTOKA kwenye vipindi WAPI id =? LIMIT 1"); } $ this-> read_stmt-> bind_param ('s', $ id); $ hii-> soma_stmt-> kutekeleza (); $ hii-> soma_stmt-> duka_result (); $ this-> read_stmt-> bind_result (data ya data); $ hii-> soma_stmt-> pata (); $ ufunguo = $ hii-> kitufe ($ id); data ya data = $ hii-> ficha (data ya $, ufunguo wa $); kurudi data ya $; }

2238751 10
2238751 10

Hatua ya 7. Unda kazi ya kuandika

Kazi hii hutumiwa tunapoweka thamani ya kikao, kwa mfano $ _SESSION ['something'] = 'kitu kingine';. Kazi inasimba data zote ambazo zinaingizwa kwenye hifadhidata.

andika kazi:

fanya kazi ya kuandika ($ id, $ data) {// Pata ufunguo wa kipekee $ key = $ this-> getkey ($ id); // Encrypt data $ data = $ this-> encrypt (data $, $ key); wakati wa $ = wakati (); ikiwa (! isset ($ this-> w_stmt)) {$ this-> w_stmt = $ this-> db-> andaa ("BADILISHA VITUO VYA VITU (id, set_time, data, session_key) MAADILI (?,?,?,?,?) "); } $ this-> w_stmt-> bind_param ('siss', $ id, $ time, $ data, $ key); $ hii-> w_stmt-> kutekeleza (); kurudi kweli; }

2238751 11
2238751 11

Hatua ya 8. Unda kazi ya kuharibu

Kazi hii inafuta kikao kutoka kwa hifadhidata, inatumiwa na php tunapoita kazi kama kikao_destroy ();.

kuharibu kazi:

kazi haribu ($ id) {if (! isset ($ this-> delete_stmt)) {$ this-> delete_stmt = $ this-> db-> jiandae ("FUTA KUTOKA Vikao WAPI id =?"); } $ this-> Dele_stmt-> bind_param ('s', $ id); $ hii-> kufuta_stmt-> kutekeleza (); kurudi kweli; }

2238751 12
2238751 12

Hatua ya 9. Unda kazi ya gc (mtoza takataka)

Kazi hii ni kazi ya kukusanya takataka inayoitwa kufuta vipindi vya zamani. Mzunguko ambao kazi hii inaitwa imedhamiriwa na maagizo mawili ya usanidi, kikao.gc_probability na session.gc_divisor.

gc () kazi:

fanya kazi gc ($ max) {if (! isset ($ this-> gc_stmt)) {$ this-> gc_stmt = $ this-> db-> jiandae ("FUTA KUTOKA kwenye vikao WAPI set_time <?"); } $ zamani = wakati () - $ max; $ hii-> gc_stmt-> bind_param ('s', $ zamani); $ hii-> gc_stmt-> kutekeleza (); kurudi kweli; }

2238751 13
2238751 13

Hatua ya 10. Unda kazi ya GetKey

Kazi hii hutumiwa kupata kitufe cha kipekee cha usimbuaji kutoka kwa meza ya vikao. Ikiwa hakuna kikao kinarudisha tu ufunguo mpya wa usimbuaji fiche.

kazi () Kazi:

faragha ya kazi ya faragha ($ id) {if (! isset ($ this-> key_stmt)) {$ this-> key_stmt = $ this-> db-> andaa ("CHAGUA kikao_kifungu KUTOKA kwa vipindi WAPI id =? LIMIT 1"); } $ this-> key_stmt-> bind_param ('s', $ id); $ hii-> key_stmt-> kutekeleza (); $ hii-> key_stmt-> duka_result (); ikiwa ($ this-> key_stmt-> num_rows == 1) {$ this-> key_stmt-> bind_result ($ key); $ this-> key_stmt-> pata (); kurudi $ key; } mwingine {$ random_key = hash ('sha512', uniqid (mt_rand (1, mt_getrandmax ()), kweli)); kurudi $ random_key; }}

2238751 14
2238751 14

Hatua ya 11. Unda kazi fiche na usimbue

Kazi hizi huweka fiche data ya vikao, hutumia kitufe cha usimbuaji kutoka kwa hifadhidata ambayo ni tofauti kwa kila kikao. Hatutumii ufunguo huo moja kwa moja katika usimbuaji lakini tunautumia kufanya hash muhimu hata zaidi.

fiche () na usimbue () kazi:

encrypt ya kazi ya kibinafsi (data ya $, $ key) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH'; $ key = substr (hash ('sha256', $ chumvi. $ key. $ chumvi), 0, 32); $ iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv ($ iv_size, MCRYPT_RAND); $ encrypted = base64_encode (mcrypt_encrypt (MCRYPT_RIJNDAEL_256, ufunguo wa $, data ya $, MCRYPT_MODE_ECB, $ iv)); kurudi $ encrypted; } faragha kazi ya faragha (data ya $, $ key) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH'; $ key = substr (hash ('sha256', $ chumvi. $ key. $ chumvi), 0, 32); $ iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv ($ iv_size, MCRYPT_RAND); $ imesimbwa = mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ key, base64_decode (data data), MCRYPT_MODE_ECB, $ iv); $ imesimbwa = rtrim ($ imesimbwa, "\ 0"); kurudi $ decrypted; }

2238751 15
2238751 15

Hatua ya 12. Maliza Darasa

Hapa tunamalizia tu mabano ya curly:

Darasa la Kumaliza:

}

Njia ya 3 ya 3: Kuunda Kurasa na Vipindi

2238751 16
2238751 16

Hatua ya 1. Kutumia vikao na meneja wa kikao maalum

Hapa chini ni jinsi ungeanza kikao kipya; utahitaji kujumuisha hii kwenye kila ukurasa unayotaka kufikia vipindi, tumia badala ya kikao_cha kuanza ();

Kuanzisha kikao:

zinahitaji ('kikao.class.php'); kikao cha $ = kikao kipya (); // Weka kuwa kweli ikiwa unatumia https $ kikao-> start_session ('_ s', uwongo); $ _SESSION ['something'] = 'Thamani.'; echo $ _SESSION ['kitu'];

Ilipendekeza: