3 דרכים ליצירת מערכת ניהול הפעלות מאובטחות ב- PHP וב- MySQL

תוכן עניינים:

3 דרכים ליצירת מערכת ניהול הפעלות מאובטחות ב- PHP וב- MySQL
3 דרכים ליצירת מערכת ניהול הפעלות מאובטחות ב- PHP וב- MySQL

וִידֵאוֹ: 3 דרכים ליצירת מערכת ניהול הפעלות מאובטחות ב- PHP וב- MySQL

וִידֵאוֹ: 3 דרכים ליצירת מערכת ניהול הפעלות מאובטחות ב- PHP וב- MySQL
וִידֵאוֹ: How to Become a Web Designer, Explained in 1 Minute 2024, אַפּרִיל
Anonim

מדריך זה יראה לך כיצד תוכל לאחסן את ההפעלות שלך בצורה מאובטחת במסד נתונים mySQL. כמו כן, נצפין את כל נתוני ההפעלה שנכנסים למסד הנתונים, כלומר אם מישהו מצליח לפרוץ למסד הנתונים כל נתוני ההפעלה מוצפנים באמצעות הצפנת AES של 256 סיביות.

צעדים

שיטה 1 מתוך 3: הגדר את מסד הנתונים mySQL

2238751 1
2238751 1

שלב 1. צור מסד נתונים של MySQL

במדריך זה ניצור מסד נתונים בשם "secure_sessions".

ראה כיצד ליצור מסד נתונים ב- phpMyAdmin.

או שתוכל להשתמש בקוד ה- SQL שלהלן כדי ליצור עבורך קוד אחד.

צור קוד מסד נתונים:

צור קובץ נתונים `secure_sessions`;

הערה: שירותי אירוח מסוימים אינם מאפשרים לך ליצור מסד נתונים באמצעות phpMyAdmin, למד כיצד לעשות זאת ב- cPanel.

2238751 2
2238751 2

שלב 2. צור משתמש בעל הרשאות SELECT, INSERT ו- DELETE בלבד

המשמעות היא שאם הייתה הפרה של האבטחה בתסריט שלנו ההאקר לא יכול היה להוריד טבלאות ממסד הנתונים שלנו. אם אתה באמת פרנואיד, צור משתמש אחר עבור כל פונקציה.

  • מִשׁתַמֵשׁ:

    "משתמש_ sec"

  • סיסמה:

    "eKcGZr59zAa2BEWU"

צור קוד משתמש:

צור משתמש 'sec_user'@'localhost' המזוהה על ידי 'eKcGZr59zAa2BEWU'; GRANT SELECT, INSERT, UPDATE, DELETE on `secure_sessions`.* TO 'sec_user'@'localhost';

הערה: כדאי לשנות את הסיסמה בקוד למעלה בעת הפעלה בשרת משלך. (הקפד לשנות גם את קוד ה- PHP שלך.) זכור שזו לא צריכה להיות סיסמה שתוכלי לזכור, כך שהסבך יהיה כמה שיותר מסובך. לפניכם מחולל סיסמאות אקראי.

2238751 3
2238751 3

שלב 3. צור טבלת MySQL בשם "הפעלות"

הקוד שלהלן יוצר טבלה עם 4 שדות (מזהה, set_time, data, session_key).

צור את הטבלה "הפעלות":

צור טבלאות 'הפעלות' ('id' char (128) NOT NULL, 'set_time' char (10) NOT NULL, 'data' text NOT NULL, 'session_key' char (128) NOT NULL, PRIMARY KEY ('id')) ENGINE = InnoDB DEFAULT CHARSET = latin1;

אנו משתמשים בסוג הנתונים של CHAR לשדות שאנו יודעים את אורך, מכיוון שהשדות "id" ו- "session_key" יהיו תמיד באורך של 128 תווים. שימוש ב- CHAR כאן חוסך את כוח העיבוד.

שיטה 2 מתוך 3: צור קובץ session.class.php

2238751 4
2238751 4

שלב 1. צור כיתה

כדי להתחיל שיעור חדש יהיה עליך להזין את הקוד שלהלן:

מחלקה חדשה:

מפגש כיתה {

2238751 5
2238751 5

שלב 2. צור פונקציית _construct

פונקציה זו תקרא בכל פעם שניצור מופע חדש של אובייקט באמצעות מחלקת 'הפעלה'. אתה יכול לקרוא על הפונקציה PHP _construct כאן.

פונקציה זו מגדירה את מטפל ההפעלות המותאם אישית שלנו כך שהוא יהיה זמין לשימוש ברגע שהמחלקה מיידית (כלומר, מיוצרת/בנויה/בנויה).

_ לבנות פונקציה:

function _construct () {// הגדר את פונקציות ההפעלה המותאמות אישית שלנו. session_set_save_handler (מערך ($ זה, 'פתוח'), מערך ($ זה, 'סגור'), מערך ($ זה, 'קרא'), מערך ($ זה, 'כתוב'), מערך ($ זה, 'הרס'), מערך ($ this, 'gc')); // שורה זו מונעת השפעות בלתי צפויות בעת שימוש באובייקטים כמטפלים שמורים. register_shutdown_function ('session_write_close'); }

2238751 6
2238751 6

שלב 3. צור פונקציית start_session

פונקציה זו תקרא בכל פעם שתרצה להתחיל הפעלה חדשה, השתמש בה במקום session_start ();. עיין בהערות בקוד כדי לראות מה כל שורה עושה.

פונקציית start_session:

function start_session ($ session_name, $ secure) {// ודא שקובצי ה- cookie של ההפעלה אינם נגישים באמצעות javascript. $ httponly = true; // אלגוריתם Hash לשימוש בפגישה. (השתמש ב- hash_algos () כדי לקבל רשימה של hashes זמינים.) $ session_hash = 'sha512'; // בדוק אם hash זמין אם (in_array ($ session_hash, hash_algos ())) {// הגדר את הפונקציה has. 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); // אילץ את ההפעלה להשתמש רק בקובצי cookie, ולא במשתני כתובת URL. ini_set ('session.use_only_cookies', 1); // קבל פרמטרים של קובצי cookie של הפעלה $ cookieParams = session_get_cookie_params (); // הגדר את הפרמטרים session_set_cookie_params ($ cookieParams ["lifetime"], $ cookieParams ["path"], $ cookieParams ["domain"], $ secure, $ httponly); // שנה את שם ההפעלה session_name ($ session_name); // עכשיו אנחנו מתחילים את הפגישה session_start (); // שורה זו מחדשת את ההפעלה ומחיקה את הישנה. // הוא גם יוצר מפתח הצפנה חדש במסד הנתונים. session_regenerate_id (נכון); }

2238751 7
2238751 7

שלב 4. צור פונקציה פתוחה

פונקציה זו תיקרא על ידי הפעלות PHP כאשר אנו מתחילים הפעלה חדשה, אנו משתמשים בה להפעלת חיבור מסד נתונים חדש.

פונקציה פתוחה:

function open () {$ host = 'localhost'; $ user = 'sec_user'; $ pass = 'eKcGZr59zAa2BEWU'; $ name = 'secure_sessions'; $ mysqli = mysqli חדש ($ host, $ user, $ pass, $ name); $ this-> db = $ mysqli; להחזיר נכון; }

2238751 8
2238751 8

שלב 5. צור פונקציה קרובה

פונקציה זו תקרא כאשר המפגשים רוצים להיסגר.

פונקציה קרובה:

פונקציה close () {$ this-> db-> close (); להחזיר נכון; }

2238751 9
2238751 9

שלב 6. צור פונקציית קריאה

פונקציה זו תיקרא על ידי PHP כאשר ננסה לגשת להפעלה למשל כאשר אנו משתמשים בהד $ _SESSION ['משהו'];. מכיוון שיכולות להיות שיחות רבות לפונקציה זו בדף אחד, אנו מנצלים הצהרות מוכנות, לא רק לאבטחה אלא גם לביצועים. אנו מכינים את ההצהרה רק פעם אחת ואז נוכל לבצע אותה פעמים רבות.

אנו גם מפענחים את נתוני ההפעלה המוצפנים במסד הנתונים. אנו משתמשים בהצפנת 256 סיביות AES בהפעלות שלנו.

פונקציית קריאה:

function read ($ id) {if (! isset ($ this-> read_stmt)) {$ this-> read_stmt = $ this-> db-> Prepar ("בחר נתונים מתוך הפעלות WHERE id =? LIMIT 1"); } $ this-> read_stmt-> bind_param ('s', $ id); $ this-> read_stmt-> execute (); $ this-> read_stmt-> store_result (); $ this-> read_stmt-> bind_result ($ data); $ this-> read_stmt-> fetch (); $ key = $ this-> getkey ($ id); $ data = $ this-> פענוח ($ data, $ key); החזר נתוני $; }

2238751 10
2238751 10

שלב 7. צור פונקציית כתיבה

פונקציה זו משמשת כאשר אנו מקצים ערך לפגישה, למשל $ _SESSION ['something'] = 'משהו אחר';. הפונקציה מצפינה את כל הנתונים שנכנסים למסד הנתונים.

פונקציית כתיבה:

כתוב פונקציה ($ id, $ data) {// קבל מפתח ייחודי $ key = $ this-> getkey ($ id); // להצפין את הנתונים $ data = $ this-> להצפין ($ data, $ key); $ time = time (); אם (! isset ($ this-> w_stmt)) {$ this-> w_stmt = $ this-> db-> הכנה ("החלף למפגשים (id, set_time, data, session_key) ערכים (?,?,?,?) "); } $ this-> w_stmt-> bind_param ('siss', $ id, $ time, $ data, $ key); $ this-> w_stmt-> execute (); להחזיר נכון; }

2238751 11
2238751 11

שלב 8. צור פונקציית הרס

פונקציה זו מוחקת את ההפעלה ממאגר הנתונים, היא משמשת את php כאשר אנו קוראים לפונקציות כמו session_destroy ();.

להרוס את הפונקציה:

function destroy ($ id) {if (! isset ($ this-> delete_stmt)) {$ this-> delete_stmt = $ this-> db-> prepare ("DELETE FRAM sessions WHERE id =?"); } $ this-> delete_stmt-> bind_param ('s', $ id); $ this-> delete_stmt-> execute (); להחזיר נכון; }

2238751 12
2238751 12

שלב 9. צור פונקציה gc (אספן זבל)

פונקציה זו היא פונקציית אספן האשפה שהיא נקראת למחוק הפעלות ישנות. התדירות שבה נקראת פונקציה זו נקבעת על ידי שתי הוראות תצורה, session.gc_probability ו- session.gc_divisor.

פונקציה gc ():

פונקציה gc ($ max) {if (! isset ($ this-> gc_stmt)) {$ this-> gc_stmt = $ this-> db-> הכנה ("DELETE FRAM sessions WHERE set_time <?"); } $ old = time () - $ max; $ this-> gc_stmt-> bind_param ('s', $ old); $ this-> gc_stmt-> execute (); להחזיר נכון; }

2238751 13
2238751 13

שלב 10. צור פונקציית getKey

פונקציה זו משמשת לקבלת המפתח הייחודי להצפנה מטבלת ההפעלות. אם אין הפעלה הוא פשוט מחזיר מפתח אקראי חדש להצפנה.

getkey () פונקציה:

פונקציה פרטית getkey ($ id) {if (! isset ($ this-> key_stmt)) {$ this-> key_stmt = $ this-> db-> prepar ("SELECT session_key FRAM sessions WHERE id =? LIMIT 1"); } $ this-> key_stmt-> bind_param ('s', $ id); $ this-> key_stmt-> execute (); $ this-> key_stmt-> store_result (); if ($ this-> key_stmt-> num_rows == 1) {$ this-> key_stmt-> bind_result ($ key); $ this-> key_stmt-> fetch (); החזר מפתח $; } אחר {$ random_key = hash ('sha512', uniqid (mt_rand (1, mt_getrandmax ()), true)); החזר $ random_key; }}

2238751 14
2238751 14

שלב 11. צור פונקציות הצפנה ופענוח

פונקציות אלה מצפינות את נתוני ההפעלות, הן משתמשות במפתח הצפנה ממסד הנתונים השונה לכל הפעלה. איננו משתמשים ישירות במפתח זה בהצפנה אך אנו משתמשים בו כדי להפוך את חשיש המפתחות לאקראי עוד יותר.

הצפנת () ופענוח () פונקציות:

הצפנת פונקציות פרטיות ($ data, $ key) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39 = E@rAsp7c-Ph@pH'; $ key = substr (hash ('sha256', $ salt. $ key. $ salt), 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, $ key, $ data, MCRYPT_MODE_ECB, $ iv)); להחזיר $ מוצפן; } פענוח פונקציות פרטיות ($ data, $ key) {$ salt = 'cH! swe! retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39 = E@rAsp7c-Ph@pH'; $ key = substr (hash ('sha256', $ salt. $ key. $ salt), 0, 32); $ iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv ($ iv_size, MCRYPT_RAND); $ decrypted = mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ key, base64_decode ($ data), MCRYPT_MODE_ECB, $ iv); $ decrypted = rtrim ($ decrypted, "\ 0"); להחזיר $ מפוענח; }

2238751 15
2238751 15

שלב 12. סיום שיעור

כאן אנחנו פשוט מסיימים את השיעורים בסוגריים מתולתלים:

סוג סיום:

}

שיטה 3 מתוך 3: יצירת דפים עם הפעלות

2238751 16
2238751 16

שלב 1. שימוש בהפעלות עם מנהל ההפעלות המותאם אישית

להלן אופן ההתחלה של הפעלה חדשה; יהיה עליך לכלול זאת בכל דף שתרצה לגשת אליו בהפעלות, השתמש בו במקום session_start ();

התחלת מפגש:

לדרוש ('session.class.php'); הפעלה $ = הפעלה חדשה (); // הגדר ל- true אם אתה משתמש ב- https $ session-> start_session ('_ s', false); $ _SESSION ['something'] = 'ערך.'; הד $ _SESSION ['משהו'];

מוּמלָץ: