कैसे PHP में क्रॉस साइट अनुरोध जाली (सीएसआरएफ) हमलों को रोकने के लिए

एक क्रॉस साइट अनुरोध जालसाजी हमले (CSRF) वेब अनुप्रयोग कमजोरियों जहां शिकार अनजाने ब्राउज़र किसी विशेष साइट के लिए कनेक्शन सत्र का उपयोग करता है में एक स्क्रिप्ट चलाने का एक प्रकार है। सीएसआरएफ हमले जीईटी या पोस्ट अनुरोधों पर किया जा सकता है। यह लेख आपको दिखाएगा कि आप अपने वेब एप्लिकेशन पर सीएसआरएफ हमलों से कैसे बचें।

कदम

विधि 1

विधियों का विवरण

अपने जीईटी और पोस्ट अनुरोध पर सीएसआरएफ हमलों से बचने के लिए हम दो तरीकों का इस्तेमाल करेंगे।


प्रत्येक अनुरोध के साथ पहले एक यादृच्छिक टोकन शामिल करना है, जो प्रत्येक सत्र के लिए एक विशिष्ट स्ट्रिंग उत्पन्न होती है। हम टोकन उत्पन्न करते हैं और फिर इसे प्रत्येक मॉड्यूल में एक गुप्त इनपुट के रूप में शामिल करते हैं। सिस्टम जांचता है कि क्या मॉड्यूल उपयोगकर्ता सत्र चर में संग्रहीत एक से टोकन की तुलना करके मान्य है। इसका मतलब यह है कि एक हमलावर, एक अनुरोध उत्पन्न करने के लिए, टोकन के मूल्य को पता होना चाहिए।


दूसरी विधि, फॉर्म में प्रत्येक फ़ील्ड के लिए यादृच्छिक नाम का उपयोग करना है। प्रत्येक फ़ील्ड के लिए यादृच्छिक नाम का मान एक सत्र चर में संग्रहीत होता है और, प्रपत्र प्रस्तुत किए जाने के बाद, सिस्टम एक नया यादृच्छिक मूल्य उत्पन्न करता है। इसका मतलब यह है कि हमला करने के लिए काम करने के लिए, हमलावर को इन यादृच्छिक नामों का अनुमान लगाना चाहिए।


उदाहरण के लिए, एक ऐसा अनुरोध जो एक बार ऐसा दिखाई देता था:

पासवर्ड का शीर्षक passwordscsrf.jpg

अब यह इस तरह दिखेगा:

छवि संरक्षित शीर्षक Protectedrequestcsrf.jpg

विधि 2

Csrf.class.php फ़ाइल बनाएँ

यह मुख्य फाइल है जिसमें सीएसआरएफ हमलों को रोकने के लिए उपयोग किए जाने वाले सभी फ़ंक्शन शामिल होंगे।

छवि शीर्षक 2543022 1
1
Csrf.class.php बनाएँ अंतर्निहित सामग्री के साथ फ़ाइल बनाकर इसे सहेजकर प्रारंभ करें:

मार्गदर्शिका के इस खंड में सभी कोड इस फ़ाइल के अंत में जोड़ दिए जाएंगे।
  • छवि शीर्षक 2543022 2
    2
    फ़ंक्शन get_token_id () फ़ंक्शन को बनाता है
    यह फ़ंक्शन उपयोगकर्ता सत्र से टोकन आईडी लेता है, अगर कोई पहले से ही नहीं बनाया गया है, जिसके बाद यह एक यादृच्छिक टोकन उत्पन्न करता है।

    सार्वजनिक समारोह get_token_id () {यदि (isset ($ _ सत्र [`टोकन_आईड`])) {$ _SESSION [`टोकन_आईडी`] -} और {$ टोकन_आईडी = $ इस->यादृच्छिक (10) - $ _ सत्र [`token_id`] = $ token_id-return $ token_id-}}
  • छवि शीर्षक 2543022 3
    3
    फ़ंक्शन get_token () फ़ंक्शन को बनाता है
    यह फ़ंक्शन टोकन मान प्राप्त करता है, यदि यह पहले से ही नहीं बनाया गया है, जिसके बाद यह एक उत्पन्न करता है

    } Else {$ टोकन = हैश ( `SHA256`, $ इस- - सार्वजनिक समारोह टोकन () {अगर (isset ($ _ सत्र [ `Token_value`])) {वापसी $ _ सत्र [ `Token_value`] मिल>यादृच्छिक (500)) - $ _ सत्र [`token_value`] = $ टोकन-वापसी $ टोकन-}}
  • छवि शीर्षक 2543022 4
    4



    फंक्शन check_valid () फ़ंक्शन निर्मित करता है
    इस फ़ंक्शन का उपयोग जांचने के लिए किया जाता है कि टोकन आईडी और टोकन मान मान्य हैं या नहीं। यह उपयोगकर्ता सत्र वेरिएबल में संग्रहीत मानों के साथ GET या POST अनुरोध के मूल्यों को जांच कर करता है।

    सार्वजनिक कार्य check_valid ($ विधि) {यदि ($ method == `post` || $ method == `get`) {$ post = $ _POST- $ get = $ _GET- अगर (isset ($ {$ method} [ $ इस->get_token_id ()]) && ($ {} $ विधि [$ इस->get_token_id ()] == $ this->get_token ())) {रिटर्न सच-} और {वापसी झूठी-}} और {वापसी- झूठी}}}
  • छवि शीर्षक 2543022 5
    5
    फ़ंक्शन form_names () फ़ंक्शन बनाता है
    सीएसआरएफ हमले के खिलाफ इस आलेख में उल्लिखित दूसरा बचाव है। यह फ़ंक्शन फ़ॉर्म फ़ील्ड के लिए यादृच्छिक नाम उत्पन्न करता है।

    सार्वजनिक समारोह form_names ($ नाम, $ पुनर्जन्म) {$ मूल्यों = सरणी () - foreach ($ नामों के रूप में $ एन) {if ($ पुनर्जन्म == सच) {सेट नहीं ($ _ सत्र [$ n]) -} $ एस = जारी ($ _ सत्र [$ n])? $ _SESSION [$ n]: $ this->यादृच्छिक (10) - $ _ सत्र [$ n] = $ s- $ मान [$ n] = $ s-} $ मान लौटें-}
  • छवि शीर्षक 2543022 6
    6
    फ़ंक्शन यादृच्छिक बनाता है () फ़ंक्शन।
    यह फ़ंक्शन एन्ट्रापी बढ़ाने के लिए लिनक्स रैंडम फ़ाइल का उपयोग करके एक यादृच्छिक स्ट्रिंग उत्पन्न करता है।

    निजी समारोह यादृच्छिक ($ लेन) {(function_exists ( `openssl_random_pseudo_bytes`)) {$ byteLen = intval (($ लेन / 2) + 1) यदि - $ लौट = substr (BIN2HEX (openssl_random_pseudo_bytes ($ byteLen)), 0, $ लेन) -} elseif (@is_readable ( `/ dev / urandom`)) {$ च = fopen ( `/ dev / urandom`, `आर`) - $ urandom = fread ($ च, $ लेन) -fclose ($ च) - $ वापसी = `` -} अगर (खाली ($ वापसी)) {के लिए (i = $ 0- $ s<$ लेन - $ i ++) {अगर) {अगर ($ मैं% 2 == 0) {mt_srand (समय ()% 2147 + 1000000 * (डबल) microtime () * 1000000) (isset ($ urandom!) - } $ रैंड = 48 + mt_rand ()% 64} else {$ रैंड = 48 + ord ($ urandom [$ i])% 64} अगर ($ rand57) $ रैंड + = 7-यदि ($ rand90) $ रैंड + = 6-अगर ($ रैंड == 123) $ रैंड = 52 यदि ($ रैंड == 124) रैंड = $ 53- $ वापसी = chr ($ रैंड) -।}}} वापसी $ लौटने
  • छवि शीर्षक 2543022 7
    7
    कक्षा के कोष्ठक को बंद करें
    यह सीएसआरएफ क्लास बंद कर देगा।

    }
    अब आप csrf.class.php फ़ाइल बंद कर सकते हैं क्योंकि हमने इसे संपादन समाप्त कर दिया है।
  • विधि 3

    Csrf.class.php के साथ पृष्ठों को सुरक्षित रखें

    ये कदम आपको दिखाएंगे कि सीएसआरएफ हमले को रोकने के लिए सीएसआरएफ वर्ग का उपयोग कैसे करें।

    छवि शीर्षक 2543022 8
    1
    एक पोस्ट फॉर्म को सुरक्षित रखें
    निम्नलिखित कोड दर्शाता है कि किसी फॉर्म पर सीएसआरएफ क्लास कैसे लागू किया जाए।

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

    संबद्ध

    © 2011—2022 GnuMani.com