ekterya.com

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

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

चरणों

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


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


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


उदाहरण के लिए, एक ऐसा आदेश जो पहले देखा गया था:

Passwordscsrf.jpg" वर्ग ="छवि लाइटबॉक्स">पासवर्ड का शीर्षक passwordscsrf.jpg

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

Protectedrequestcsrf.jpg" वर्ग ="छवि लाइटबॉक्स">छवि संरक्षित शीर्षक Protectedrequestcsrf.jpg

चरणों

विधि 1
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 () फ़ंक्शन बनाएं
    यह फ़ंक्शन पहचानकर्ता के मान को प्राप्त करता है अगर कोई पहले उत्पन्न नहीं हुआ था, तो अब इसे जनरेट किया जाएगा।

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



    Check_valid () फ़ंक्शन बनाएँ।
    इस फ़ंक्शन का उपयोग जांचने के लिए किया जाता है कि पहचानकर्ता और पहचानकर्ता का मान मान्य है या नहीं। यह उपयोगकर्ता के सत्र चर में संग्रहीत मानों के साथ GET या POST ऑर्डर के मूल्यों की तुलना करके करता है।

    सार्वजनिक समारोह check_valid ($ विधि) {अगर ($ विधि == `पोस्ट` || $ विधि == `प्राप्त`) {$ पोस्ट = $ _POST- $ प्राप्त = $ _GET-अगर (isset ($ {$ विधि} [ $ इस->get_token_id ()]) && ($ {$ विधि} [$ this->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
    यादृच्छिक () फ़ंक्शन बनाएँ
    यह फ़ंक्शन रैंडम लिनक्स फ़ाइल का उपयोग कर एक यादृच्छिक स्ट्रिंग उत्पन्न करता है, जो कि अधिक एंट्रपी के लिए है।

    निजी समारोह यादृच्छिक ($ लेन) {अगर (@is_readable ( `/ dev / urandom`)) {$ च = fopen ( "/ dev / urandom `,` आर `) - $ urandom = fread ($ च, $ लेन) -fclose ($ f) -} $ return = `` - के लिए ($ i = 0- $ i<$ लेन - $ i ++) {अगर (isset ($ urandom!)) {अगर ($ मैं% 2 == 0) mt_srand (समय ()% 2147 * 1000000 + (डबल) microtime () * 1000000) - $ रैंड = 48 + mt_rand ()} किसी और $ 64% रैंड = 48 + ord ($ urandom [$ i])% 64-अगर ($ रैंड>57) $ रैंड + = 7-अगर ($ रैंड>90) $ रैंड + = 6-अगर ($ रैंड == 123) $ रैंड = 52-अगर ($ रैंड == 124) $ रैंड = 53- $ रिटर्न। = CHR ($ रैंड) -} वापसी $ वापसी-}
  • छवि शीर्षक 2543022 7
    7
    क्लास कुंजी को बंद करें
    यह सीएसआरएफ क्लास को समाप्त करेगा I

    }
    अब आप csrf.class.php फ़ाइल को बंद कर सकते हैं, क्योंकि हमने इसे संपादन समाप्त कर दिया है।
  • विधि 2
    Csrf.class.php के साथ अपने पृष्ठों को सुरक्षित रखें

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

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

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

    संबद्ध
    © 2021 ekterya.com