Apache APISIX ने CSRF Plugin के माध्यम से API सुरक्षा को बढ़ाया

API7.ai

February 23, 2022

Products

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

यह लेख csrf, Apache APISIX के लिए CSRF सुरक्षा प्लगइन का परिचय देता है, और विस्तार से बताता है कि कैसे csrf प्लगइन की मदद से Apache APISIX में अपनी API जानकारी को सुरक्षित करें।

प्लगइन परिचय

csrf प्लगइन Double Submit Cookie योजना के आधार पर लागू किया गया है। RFC 7231#section-4.2.1 में परिभाषित के अनुसार, हम GET, HEAD और OPTIONS विधियों को सुरक्षित विधियों के रूप में मानते हैं। इस परंपरा के अनुसार, csrf प्लगइन इन तीन विधियों को सीधे जाने देगा, लेकिन अन्य विधियों की जांच करेगा और किसी भी असुरक्षित अनुरोध को रोक देगा।

CSRF हमलों से बचाव के लिए, हमें एक टोकन या पहचानकर्ता बनाने की आवश्यकता है जो जाली नहीं जा सकता और यह सुनिश्चित करना है कि यह हमलावर के अनुरोध के साथ नहीं भेजा जाता है। उपयोगकर्ता को अनुरोध हेडर में csrf प्लगइन पर निर्भर टोकन को ले जाने की आवश्यकता होती है, और टोकन को हस्ताक्षर करने के लिए एक कुंजी का उपयोग करके गणना की जाती है। यह सुनिश्चित करता है कि टोकन को दूसरों द्वारा जाली नहीं किया जा सकता है, इस प्रकार API को सुरक्षित करता है।

प्लगइन

जब किसी रूट में csrf प्लगइन सक्षम किया जाता है, तो उस रूट के सभी अनुरोध प्रतिक्रियाओं में एक कुकी शामिल होगी जो csrf टोकन को ले जाती है।

उपयोगकर्ता को इस रूट के लिए एक असुरक्षित अनुरोध में इस कुकी को ले जाने की आवश्यकता होती है और अनुरोध हेडर में एक अतिरिक्त फ़ील्ड जोड़ने की आवश्यकता होती है जो कुकी की सामग्री को ले जाता है। फ़ील्ड प्लगइन कॉन्फ़िगरेशन में name मान है ताकि अनुरोध CSRF प्लगइन की जांच पास कर सके।

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

प्लगइन का उपयोग कैसे करें

एक रूट में CSRF प्लगइन सक्षम करें

APISIX में Admin API का उपयोग करके एक रूट बनाएं और csrf प्लगइन सक्षम करें।

curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/hello", "plugins": { "csrf": { "key": "edd1c9f034335f136f87ad84b625c8f1" } }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:9001": 1 } } }'

प्लगइन के लिए तीन कॉन्फ़िगरेशन पैरामीटर हैं।

  • key: आवश्यक फ़ील्ड, यादृच्छिक गुप्त कुंजी का मान। उपयोगकर्ता को एक यादृच्छिक कुंजी प्रदान करने की आवश्यकता होती है।
  • expires: वैकल्पिक, यादृच्छिक गुप्त कुंजी की समाप्ति समय, डिफ़ॉल्ट मान 7200 सेकंड है। चूंकि CSRF टोकन को कुकी का उपयोग करके क्लाइंट को भेजा जाता है, यह कॉन्फ़िगरेशन कुकी की कॉन्फ़िगरेशन में रखा जाता है ताकि कुकी की समाप्ति समय को नियंत्रित किया जा सके। इसके अलावा, प्लगइन यह भी गणना करेगा कि टोकन समाप्त हो गया है या नहीं।
  • name: वैकल्पिक, CSRF टोकन का नाम, डिफ़ॉल्ट मान apisix-csrf-token है।

एक अनुरोध भेजें

रूट को पहले POST अनुरोध का उपयोग करके एक्सेस किया जाता है।

curl -i http://127.0.0.1:9080/hello -X POST

Apache APISIX अनुरोध को रोक देगा और एक 401 त्रुटि वापस करेगा। वापसी हेडर में आपको एक कुकी सेट मिलेगी, जो कि प्लगइन के नाम फ़ील्ड को कॉन्फ़िगर नहीं किया गया हो तो कुकी के अंदर डिफ़ॉल्ट मान apisix-csrf-token=.... होना चाहिए। यह CSRF प्लगइन द्वारा उत्पन्न किया गया CSRF टोकन है। अनुरोध में, आपको यह सुनिश्चित करने की आवश्यकता है कि अनुरोध इस कुकी को ले जाता है और टोकन को अनुरोध हेडर में लिखा जाता है।

HTTP/1.1 401 Unauthorized Set-Cookie: apisix-csrf-token= ${apisix-csrf-token};path=/;Expires=Mon, 13-Dec-21 09:33:55 GMT {"error_msg":"no csrf token in headers"}

क्लाइंट साइड पर JavaScript का उपयोग करने का उदाहरण: js-cookie का उपयोग करके कुकीज़ पढ़ें और axios का उपयोग करके अनुरोध भेजें।

const token = Cookie.get('apisix-csrf-token'); const instance = axios.create({ headers: {'apisix-csrf-token': token} });

यदि कुकी में टोकन अनुरोध हेडर में टोकन से मेल नहीं खाता है, तो अनुरोध को csrf प्लगइन द्वारा रोक दिया जाएगा, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है।

curl -i http://127.0.0.1:9080/hello -X POST -H 'apisix-csrf-token: ${apisix-csrf-token}' -b 'apisix-csrf-token= ${apisix-csrf-token}'
HTTP/1.1 401 Unauthorized Set-Cookie: apisix-csrf-token= ${apisix-csrf-token};path=/;Expires=Mon, 13-Dec-21 09:33:55 GMT {"error_msg":"csrf token mismatch"}

अंत में, curl का उपयोग करके नियमित पहुंच को सत्यापित करें।

curl -i http://127.0.0.1:9080/hello -X POST -H 'apisix-csrf-token: ${apisix-csrf-token}' -b 'apisix-csrf-token= ${apisix-csrf-token}'
HTTP/1.1 200 OK

आंतरिक रूप से, प्लगइन को यह सत्यापित करने की आवश्यकता होती है कि कुकी में टोकन अनुरोध हेडर में ले जाए गए टोकन से मेल खाता है और हस्ताक्षर को पुनः गणना करके यह सत्यापित करता है कि टोकन मान्य है।

प्लगइन अक्षम करें

csrf प्लगइन के लिए संबंधित कॉन्फ़िगरेशन जानकारी को हटाएं और फिर रूट को अपडेट करने के लिए एक अनुरोध भेजें ताकि प्लगइन को अक्षम किया जा सके।

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/hello", "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } } }'

सारांश

यह लेख विस्तार से बताता है कि csrf प्लगइन कैसे काम करता है और इसका उपयोग कैसे करें। हम आशा करते हैं कि यह लेख आपको Apache APISIX में CSRF हमलों को रोकने के लिए प्लगइन का उपयोग करने की स्पष्ट समझ दे सकता है और व्यावहारिक परिदृश्यों में इसके अनुप्रयोग को सुविधाजनक बना सकता है।

Apache APISIX वर्तमान में अतिरिक्त प्लगइन्स को समर्थन करने के लिए काम कर रहा है, इसलिए यदि आप रुचि रखते हैं, तो कृपया GitHub Discussion में चर्चा शुरू करें, या मेलिंग सूची के माध्यम से संवाद करें।

Tags: