IhsAdke.com

PHP में सीएसआरएफ हमलों को कैसे रोकें

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

चरणों

विधि 1
तरीकों का अवलोकन

हम अपने GET और POST अनुरोधों में CSRF हमलों को रोकने में मदद करने के लिए दो तरीकों का उपयोग करेंगे।


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


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


उदाहरण के लिए, एक अनुरोध जिसके पास यह फ़ॉर्म था:

यह ऐसा दिखेगा:

विधि 2
Csrf.class.php फ़ाइल बनाना

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

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

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

    सार्वजनिक समारोह get_token_id () {अगर (isset ($ _ सत्र [ `TOKEN_ID`])) {$ _ सत्र लौटने [ `TOKEN_ID`] - और} {$ TOKEN_ID = $ this-> रैंडम (10) - $ _ सत्र [ `TOKEN_ID` ] = $ TOKEN_ID-रिटर्न $ token_id-}}
  • चित्र शीर्षक 2543022 3
    3
    Get_token () फ़ंक्शन बनाएं
    इस फ़ंक्शन को टोकन का मूल्य मिलता है, अगर यह पहले से उत्पन्न नहीं हुआ है, तो यह एक उत्पन्न करता है

    सार्वजनिक समारोह get_token () {अगर (isset ($ _ सत्र [ `token_value`])) {$ लौट _ सत्र [ `token_value`] -} else {$ टोकन = हैश ( `SHA256`, $ this-> यादृच्छिक (500)) - $ _ सत्र [ `token_value`] = टोकन-रिटर्न $ $}} token-
  • छवि शीर्षक 2543022 4
    4
    Check_valid () फ़ंक्शन बनाएँ।
    इस फ़ंक्शन का उपयोग यह सत्यापित करने के लिए किया जाता है कि टोकन मान और आईडी मान्य हैं। यह उपयोगकर्ता सत्र वेरिएबल में संग्रहीत मानों के साथ GET या POST अनुरोध के मूल्यों को जांच कर करता है।




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

    सार्वजनिक $ फार्म = $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक $ सार्वजनिक = जारी ($ _SESSION [$ 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- $ i<$len-++$i) {if (!isset($urandom)) {if ($i%2==0) {mt_srand(time()%2147 * 1000000 + (double)microtime() * 1000000)-}$rand=48+mt_rand()%64-} else {$rand=48+ord($urandom[$i])%64-}if ($rand>57) $ रैंड + = 7-अगर ($ रैंड> 90) $ रैंड + = 6-अगर ($ रैंड == 123) $ रैंड = 52-अगर ($ रैंड == 124) $ रैंड = 53- $ रिटर्न ($ रैंड) -}} रिटर्न $ रिटर्न-}
  • 7
    क्लास ब्रैकेट को बंद करें
    यह सीएसआरएफ क्लास को समाप्त करेगा।

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

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

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

      get_token_id () - $ token_value = $ csrf-> get_token ($ TOKEN_ID) - // उत्पन्न यादृच्छिक रूप नाम form_names $ = $ csrf-> form_names (सरणी ( `उपयोगकर्ता`, `पासवर्ड`), गलत) -यदि (isset ($ _POST [$ form_names [ `उपयोगकर्ता`]], $ _POST [$ form_names [ `पासवर्ड`]])) {// जाँच करें कि आईडी के मूल्य और टोकन válidos.if (हैं $ csrf-> check_valid ( ` पोस्ट `)) {// प्राप्त प्रपत्र चर $ उपयोगकर्ता = $ _POST [$ form_names [।` उपयोगकर्ता `]] - $ पासवर्ड = $ _POST [$ form_names [` पासवर्ड `]] - // फार्म के कार्य नहीं करेंगी यहाँ} // $ प्रपत्र = $ form_names csrf-> form_names के लिए एक नई यादृच्छिक मूल्य (सरणी ( `उपयोगकर्ता`, `पासवर्ड`), सच) को फिर से बना सकते हैं -।}>?
    सामाजिक नेटवर्क पर साझा करें:

    संबद्ध
    © 2021 IhsAdke.com