PHP और MySQL में एक सुरक्षित सत्र प्रबंधन प्रणाली कैसे बनाएं

यह गाइड आपको दिखाएगा कि आप अपने सत्रों को एक MySQL डेटाबेस में सुरक्षित रूप से कैसे स्टोर कर सकते हैं. हम डेटाबेस में जाने वाले सभी सत्र डेटा को भी एन्क्रिप्ट करेंगे, जिसका अर्थ है कि यदि कोई डेटाबेस में हैक करने का प्रबंधन करता है तो सभी सत्र डेटा 256-बिट एईएस एन्क्रिप्शन द्वारा एन्क्रिप्ट किया जाता है.

कदम

3 का विधि 1:
MySQL डेटाबेस को कॉन्फ़िगर करें
  1. 2238751 1 शीर्षक वाली छवि
1. एक MySQL डेटाबेस बनाएं.
इस गाइड में हम एक डेटाबेस तैयार करेंगे "Secure_Sessions".
कैसे देखें बनाएँ-ए-डेटाबेस-इन-PHPMyAdmin.
या आप नीचे दिए गए SQL कोड का उपयोग कर सकते हैं जो आपके लिए एक बना देगा.

डेटाबेस कोड बनाएं:
डेटाबेस `secure_sessions` बनाएँ -
नोट: कुछ होस्टिंग सेवाएं आपको PHPMyAdmin के माध्यम से डेटाबेस बनाने की अनुमति नहीं देती हैं, यह जानें कि इसे सीपीनल में कैसे करें.
  • 2238751 2 शीर्षक वाली छवि
    2. एक उपयोगकर्ता को केवल चयन, सम्मिलित करें और हटाएं के साथ बनाएं.
    इसका मतलब यह है कि यदि हमारी स्क्रिप्ट में सुरक्षा का उल्लंघन कभी हुआ है तो हैकर हमारे डेटाबेस से तालिकाओं को नहीं छोड़ सकता है.यदि आप वास्तव में पागल हैं, तो प्रत्येक फ़ंक्शन के लिए एक अलग उपयोगकर्ता बनाएं.

  • उपयोगकर्ता: "SEC_USER"
  • कुंजिका: "ekcgzr59zaa2bewu"


  • उपयोगकर्ता कोड बनाएं:
    `Ekcgzr59zaa2bewu`-अनुदान द्वारा` seccgzr59zaa2bewu`-अनुदान द्वारा पहचाने गए उपयोगकर्ता `sec_user` @ `लोकहोस्ट` बनाएँ, `secure_sessions पर हटाएं.* `SEC_USER` @ `लोकलहोस्ट`-

    नोट: अपने सर्वर पर चलते समय ऊपर दिए गए कोड में पासवर्ड बदलना एक अच्छा विचार है. (सुनिश्चित करें कि आप अपना PHP कोड भी बदलें.) याद रखें कि यह एक पासवर्ड होने की आवश्यकता नहीं है जिसे आप याद कर सकते हैं इसलिए जितना संभव हो उतना जटिल है. यहाँ एक है यादृच्छिक पासवर्ड जनक.
  • 2238751 3 शीर्षक वाली छवि
    3. नामित एक MySQL तालिका बनाएं "सत्र".
    नीचे दिया गया कोड 4 फ़ील्ड (आईडी, SET_TIME, डेटा, SESSE_KEY) के साथ एक तालिका बनाता है.

    बनाना "सत्र" तालिका:
    तालिका `सत्र `(` आईडी` चार (128) नॉट नल,` set_time` चार (10) शून्य नहीं, `डेटा` पाठ शून्य नहीं, `session_key` चार (128) शून्य नहीं, प्राथमिक कुंजी (` आईडी `) ) इंजन = InnoDB डिफ़ॉल्ट CharSet = LATIN1-
    हम उन क्षेत्रों के लिए चार डेटाटाइप का उपयोग करते हैं जिन्हें हम फ़ील्ड के रूप में जानते हैं "ईद" तथा "session_key" हमेशा 128 वर्ण लंबा होगा. यहां चार का उपयोग प्रसंस्करण शक्ति पर बचाता है.
  • 3 का विधि 2:
    सत्र बनाएँ.कक्षा.PHP फ़ाइल
    1. 2238751 4 शीर्षक वाली छवि
    1. कक्षा बनाएँ.
    एक नई कक्षा शुरू करने के लिए आपको नीचे दिए गए कोड को दर्ज करना होगा:

    नई कक्षा:
    कक्षा सत्र {
  • 2238751 5 शीर्षक वाली छवि
    2. __Construct फ़ंक्शन बनाएं.
    इस फ़ंक्शन को हर बार जब हम `सत्र` वर्ग का उपयोग करके किसी ऑब्जेक्ट का एक नया उदाहरण बनाते हैं. आप PHP __construct फ़ंक्शन पर पढ़ सकते हैं यहां.
    यह फ़ंक्शन हमारे कस्टम सत्र हैंडलर सेट करता है ताकि कक्षा को तत्काल (i) के रूप में जल्द ही उपयोग के लिए उपलब्ध हो.इ., बनाया / निर्मित / निर्मित).

    __ संगठित समारोह:
    फंक्शन __नस्ट्रक्ट () {// हमारे कस्टम सत्र कार्यों को सेट करें.session_set_save_handler (सरणी ($ यह, `खुला`), सरणी ($ यह, `बंद`), सरणी ($ यह, `पढ़ा`), सरणी ($ यह, `लिखना`), सरणी ($ यह, `नष्ट` ), सरणी ($ यह, `जीसी`)) - // यह रेखा हैंडलर के रूप में वस्तुओं का उपयोग करते समय अप्रत्याशित प्रभावों को रोकती है.register_shutdown_function (`session_write_close`) -}
  • 2238751 6 शीर्षक वाली छवि
    3. START_SESSION फ़ंक्शन बनाएं.
    इस फ़ंक्शन को हर बार एक नया सत्र शुरू करना चाहते हैं, इसे SESSE_START () के बजाय इसका उपयोग करें-. प्रत्येक पंक्ति क्या करता है यह देखने के लिए कोड में टिप्पणियां देखें.

    START_SESSION फ़ंक्शन:
    फ़ंक्शन START_SESSION ($ SESES_NAME, $ सुरक्षित) {// सुनिश्चित करें कि सत्र कुकी जावास्क्रिप्ट के माध्यम से सुलभ नहीं है.$ httponly = true - // हैश एल्गोरिथ्म सत्र के लिए उपयोग करने के लिए. (उपलब्ध हैश की सूची प्राप्त करने के लिए hash_algos () का उपयोग करें.) $ session_hash = `sha512` - // जांच अगर हैश उपलब्ध है (in_array ($ session_hash, hash_algos ())) {// सेट है.ini_set (`सत्र).hash_function `, $ session_hash) -} // हैश के प्रति कितने बिट्स.// संभावित मूल्य `4` (0-9, ए-एफ), `5` (0-9, ए-वी), और `6` (0-9, ए-जेड, ए-जेड) हैं, "-", ",").ini_set (`सत्र).hash_bits_per_character `, 5) - // केवल कुकीज़ का उपयोग करने के लिए सत्र को बल, यूआरएल चर नहीं.ini_set (`सत्र).use_only_cookies `, 1) - // सत्र कुकी पैरामीटर प्राप्त करें $ cookieparams = session_get_cookie_params () - // पैरामीटरसेट_SET_COOKIE_PARAMS ($ कुकीपरम ["जीवन काल"], $ कुकीपरम ["पथ"], $ कुकीपरम ["डोमेन"], $ सुरक्षित, $ httponly) - // सत्र नाम SESEL_NAME ($ SESSEN_NAME) - // अब हम SAT SASSESSESSESSION_START () - // यह पंक्ति सत्र को पुन: उत्पन्न करती है और पुराने को हटा देती है. // यह डेटाबेस में एक नई एन्क्रिप्शन कुंजी भी उत्पन्न करता है. session_regenerate_id (सत्य) -}
  • 2238751 7 शीर्षक वाली छवि
    4. खुला समारोह बनाएँ.
    जब हम एक नया सत्र शुरू करते हैं तो इस फ़ंक्शन को PHP सत्रों द्वारा बुलाया जाएगा, हम इसे एक नया डेटाबेस कनेक्शन शुरू करने के लिए उपयोग करते हैं.

    खुला समारोह:
    फ़ंक्शन ओपन () {$ होस्ट = `लोकलहोस्ट` - $ उपयोगकर्ता = `sec_user` - $ PASS = `EKCGZR59ZA2BEWU` - $ NAME = `SCUEER_SASSIONS` - $ MYSQLI = NEW MYSQLI ($ होस्ट, $ उपयोगकर्ता, $ पास, $ NAME ) - $ यह->db = $ mysqli- वापसी सच-}
  • 2238751 8 शीर्षक वाली छवि
    5. बंद समारोह बनाएँ.
    इस समारोह को तब कहा जाएगा जब सत्र बंद होना चाहते हैं.

    समारोह बंद करें:
    समारोह बंद करें () {$ यह->डाटाबेस->बंद करें () - वापस लौटें-}
  • 2238751 9 शीर्षक वाली छवि
    6. रीड फ़ंक्शन बनाएं.
    इस फ़ंक्शन को PHP द्वारा कॉल किया जाएगा जब हम उदाहरण के लिए एक सत्र तक पहुंचने का प्रयास करते हैं जब हम प्रतिध्वनि $ _session [`कुछ`] का उपयोग करते हैं-. चूंकि इस फ़ंक्शन को एक ही पृष्ठ पर कई कॉल हो सकते हैं, इसलिए हम न केवल सुरक्षा के लिए बल्कि प्रदर्शन के लिए तैयार बयान का लाभ उठाते हैं. हम केवल एक बार कथन तैयार करते हैं, फिर हम इसे कई बार निष्पादित कर सकते हैं.
    हम डेटाबेस में एन्क्रिप्ट किए गए सत्र डेटा को भी डिक्रिप्ट करते हैं. हम अपने सत्रों में 256-बिट एईएस एन्क्रिप्शन का उपयोग कर रहे हैं.

    फ़ंक्शन पढ़ें:
    फंक्शन रीड ($ ID) {अगर (!ISSET ($ यह->READ_STMT)) {$ यह->read_stmt = $ यह->डाटाबेस->तैयार("सत्रों से डेटा का चयन करें जहां आईडी = ? सीमा 1") -} $ यह->READ_STMT->BIND_PARAM (`S`, $ ID) - $ यह->READ_STMT->निष्पादन () - यह $->READ_STMT->STORE_RESULT () - $ यह->READ_STMT->bind_result ($ डेटा) - यह $->READ_STMT->Fetch () - $ कुंजी = $ यह->गेटकी ($ ID) - $ डेटा = $ यह->डिक्रिप्ट ($ डेटा, $ कुंजी) -return $ डेटा-}
  • 2238751 10 शीर्षक वाली छवि
    7. लेखन समारोह बनाएँ.
    इस फ़ंक्शन का उपयोग तब किया जाता है जब हम एक सत्र में मान निर्दिष्ट करते हैं, उदाहरण के लिए $ _session [`कुछ`] = `कुछ और`-. फ़ंक्शन डेटा को एन्क्रिप्ट करता है जो डेटाबेस में डाले जाते हैं.

    लेखन समारोह:
    फ़ंक्शन लिखें ($ ID, $ डेटा) {// अद्वितीय कुंजी $ कुंजी = $ प्राप्त करें->गेटकी ($ ID) - // डेटा को एन्क्रिप्ट करें $ डेटा = $->एन्क्रिप्ट ($ डेटा, $ कुंजी) - $ समय = समय () - यदि (!ISSET ($ यह->w_stmt)) {$ यह->w_stmt = $ यह->डाटाबेस->तैयार("सत्रों (आईडी, set_time, डेटा, session_key) मानों में बदलें (?, ?, ?, ?)") -} $ यह->w_stmt->BIND_PARAM (`SISS`, $ ID, $ TIME, $ डेटा, $ कुंजी) - $ यह->w_stmt->निष्पादित () - वापस लौटें-}
  • 2238751 11 शीर्षक वाली छवि
    8. नष्ट समारोह बनाएँ.
    यह फ़ंक्शन डेटाबेस से सत्र को हटा देता है, इसका उपयोग PHP द्वारा किया जाता है जब हम session__destroy () जैसे कार्यों को कॉल करते हैं-.

    नष्ट समारोह:
    समारोह नष्ट ($ ID) {अगर (!ISSET ($ यह->delete_stmt) {$ यह->delete_stmt = $ यह->डाटाबेस->तैयार("सत्रों से हटाएं जहां आईडी = ?") -} $ यह->delete_stmt->BIND_PARAM (`S`, $ ID) - $ यह->delete_stmt->निष्पादित () - वापस लौटें-}
  • 2238751 12 शीर्षक वाली छवि
    9. जीसी (कचरा कलेक्टर) समारोह बनाएँ.
    यह फ़ंक्शन कचरा कलेक्टर फ़ंक्शन है जिसे इसे पुराने सत्रों को हटाने के लिए कहा जाता है. आवृत्ति जिसमें इस फ़ंक्शन को कहा जाता है, दो कॉन्फ़िगरेशन निर्देशों, सत्र द्वारा निर्धारित किया जाता है.gc_probability और सत्र.gc_divisor.

    जीसी () समारोह:
    फंक्शन जीसी ($ अधिकतम) {अगर (!ISSET ($ यह->gc_stmt)) {$ यह->gc_stmt = $ यह->डाटाबेस->तैयार("SET_TIME पर SESSIONS से ​​हटाएं < ?") -} $ पुराना = समय () - $ अधिकतम $->gc_stmt->bind_param (`एस`, $ पुराना) - $ यह->gc_stmt->निष्पादित () - वापस लौटें-}
  • 2238751 13 शीर्षक वाली छवि
    10. गेटकी फ़ंक्शन बनाएं.
    इस फ़ंक्शन का उपयोग सत्र तालिका से एन्क्रिप्शन के लिए अद्वितीय कुंजी प्राप्त करने के लिए किया जाता है. यदि कोई सत्र नहीं है तो यह एन्क्रिप्शन के लिए एक नई यादृच्छिक कुंजी देता है.

    गेटकी () समारोह:
    निजी फ़ंक्शन गेटकी ($ ID) {अगर (!ISSET ($ यह->KEY_STMT)) {$ यह->key_stmt = $ यह->डाटाबेस->तैयार("सत्रों से session_key का चयन करें जहां आईडी = ? सीमा 1") -} $ यह->KEY_STMT->BIND_PARAM (`S`, $ ID) - $ यह->KEY_STMT->निष्पादन () - यह $->KEY_STMT->STORE_RESULT () - IF (यह $)->KEY_STMT->NUM_ROWS == 1) {$ यह->KEY_STMT->BIND_RESULT ($ कुंजी) - $ यह->KEY_STMT->Fetch () - $ key-} को वापस करें} {$ random_key = hash (`sha512`, uniqid (mt_rand (1, mt_getrandmax ()), सत्य)) - रिटर्न $ RAMON_KEY-}}
  • 2238751 14 शीर्षक वाली छवि
    1 1. एन्क्रिप्ट बनाएं और कार्यों को डिक्रिप्ट करें.
    ये कार्य सत्रों के डेटा को एन्क्रिप्ट करते हैं, वे डेटाबेस से एक एन्क्रिप्शन कुंजी का उपयोग करते हैं जो प्रत्येक सत्र के लिए अलग होता है. हम सीधे एन्क्रिप्शन में उस कुंजी का उपयोग नहीं करते हैं लेकिन हम इसे कुंजी हैश को और भी यादृच्छिक बनाने के लिए उपयोग करते हैं.

    एन्क्रिप्ट () और डिक्रिप्ट () कार्य:
    निजी फ़ंक्शन एन्क्रिप्ट ($ डेटा, $ कुंजी) {$ नमक = `ch!दुर्भाग्य!retregu7w6bedrup7usuduh9theed2chege * ewr4n39 = e @ rasp7c-ph @ ph `- $ कुंजी = सबस्ट्र (हैश (` SHA256 `, $ नमक.$ कुंजी.$ नमक), 0, 32) - $ iv_size = mcrypt_get_iv_size (mcrypt_mode_ecb) - $ iv = mcrypt_create_iv ($ iv_size, mcrypt_rand) - $ एन्क्रिप्टेड = base64_encode (mcrypt_encrypt (mcrypt_rijndael_256, $ कुंजी, $ डेटा, mcrypt_mode_ecb, $ iv) ) -return $ एन्क्रिप्टेड-} निजी फ़ंक्शन डिक्रिप्ट ($ डेटा, $ कुंजी) {$ नमक = `ch!दुर्भाग्य!retregu7w6bedrup7usuduh9theed2chege * ewr4n39 = e @ rasp7c-ph @ ph `- $ कुंजी = सबस्ट्र (हैश (` SHA256 `, $ नमक.$ कुंजी.$ नमक), 0, 32) - $ iv_size = mcrypt_get_iv_size (mcrypt_rijndale_256, mcrypt_mode_create_iv ($ iv_size, mcrypt_rand) - $ decrypted = mcrypt_decrypt (mcrypt_rijndel_256, $ कुंजी, base64_decode ($ डेटा), mcrypt_mode_ecb, $ iv ) - $ डिक्रिप्टेड = आरटीआरआईएम ($ डिक्रिप्टेड), " 0") - $ $ decrypted-}
  • 2238751 15 शीर्षक वाली छवि
    12. अंत वर्ग.
    यहां हम सिर्फ कक्षाओं घुंघराले ब्रैकेट को समाप्त करते हैं:

    अंतिम वर्ग:
    }
  • 3 का विधि 3:
    सत्र के साथ पेज बनाना
    1. 2238751 16 शीर्षक वाली छवि
    1. कस्टम सत्र प्रबंधक के साथ सत्र का उपयोग करना.
    नीचे यह है कि आप एक नया सत्र कैसे शुरू करेंगे- आपको इस पृष्ठ पर इसे शामिल करने की आवश्यकता होगी जिसे आप सत्रों तक पहुंचना चाहते हैं, SESSE_START () के बजाय इसका उपयोग करें-

    एक सत्र शुरू करना:
    आवश्यकता (`सत्र).कक्षा.PHP `) - $ सत्र = नया सत्र () - // HTTPS $ सत्र का उपयोग करते हुए TRUE पर सेट->START_SESSION (`_ S`, FALSE) - $ _ सत्र [`कुछ`] = `एक मान.`-च्चो $ _session [` कुछ `]-

    टिप्स

    सामाजिक नेटवर्क पर साझा करें:
    समान