GET अनुरोध POST अनुरोध की तुलना में थोड़ा कम सुरक्षित है। न तो स्वयं द्वारा सही "सुरक्षा" प्रदान करता है; POST अनुरोधों का उपयोग करके आपकी वेबसाइट को दुर्भावनापूर्ण हमलों के खिलाफ ध्यान देने योग्य राशि से सुरक्षित नहीं बनाया जाएगा । हालाँकि, GET अनुरोधों का उपयोग कर सकते हैं एक अन्यथा सुरक्षित आवेदन असुरक्षित हैं।
जो मंत्र "आपको परिवर्तन करने के लिए GET अनुरोधों का उपयोग नहीं करना चाहिए" अभी भी बहुत वैध है, लेकिन यह दुर्भावना के साथ करने के लिए बहुत कम है व्यवहार के । लॉग फॉर्म गलत अनुरोध प्रकार का उपयोग करके भेजे जाने के लिए सबसे संवेदनशील होते हैं।
मकड़ियों और वेब त्वरक खोजें
यह वास्तविक कारण है जिसे आपको डेटा बदलने के लिए POST अनुरोधों का उपयोग करना चाहिए। खोज मकड़ियाँ आपकी वेबसाइट के हर लिंक का अनुसरण करेंगी, लेकिन उनके द्वारा खोजे गए यादृच्छिक रूप प्रस्तुत नहीं करेंगी।
वेब त्वरक खोज मकड़ियों से भी बदतर हैं, क्योंकि वे क्लाइंट की मशीन पर चलते हैं, और उपयोगकर्ता के लॉग के संदर्भ में सभी लिंक को "क्लिक करें" । इस प्रकार, एक एप्लिकेशन जो सामान को हटाने के लिए एक जीईटी अनुरोध का उपयोग करता है, भले ही इसके लिए व्यवस्थापक की आवश्यकता हो, खुशी से (गैर-दुर्भावनापूर्ण!) वेब त्वरक के आदेशों का पालन करेगा और वह सब कुछ हटा देगा जो वह देखता है! ।
भ्रमित डिप्टी हमला
एक भ्रमित डिप्टी अटैक (जहां डिप्टी ब्राउज़र है) चाहे आप GET या POST अनुरोध का उपयोग करें , संभव है ।
हमलावर नियंत्रित वेबसाइटों पर GET और POST समान रूप से उपयोगकर्ता इंटरैक्शन के बिना सबमिट करना आसान है ।
एकमात्र परिदृश्य जिसमें POST थोड़ा कम अतिसंवेदनशील है, कई वेबसाइटें जो हमलावर के नियंत्रण में नहीं हैं (जैसे, एक तृतीय-पक्ष फोरम) मनमाने ढंग से छवियों को एम्बेड करने की अनुमति देता है (हमलावर को एक मनमाना जीईटी अनुरोध को इंजेक्ट करने की अनुमति देता है), लेकिन सभी एक स्वचालित या मैनुअल, एक मनमाने ढंग से POST अनुरोध को इंजेक्ट करने के तरीके।
कोई यह तर्क दे सकता है कि वेब एक्सेलेरेटर भ्रमित डिप्टी हमले का एक उदाहरण है, लेकिन यह केवल परिभाषा की बात है। यदि कुछ भी, एक दुर्भावनापूर्ण हमलावर का इस पर कोई नियंत्रण नहीं है, तो यह शायद ही कोई हमला है , भले ही डिप्टी हो उलझन में।
प्रॉक्सी लॉग करता है
प्रॉक्सी सर्वर क्वेरी स्ट्रिंग को अलग किए बिना, GET URL को अपनी संपूर्णता में लॉग इन करने की संभावना रखते हैं। POST अनुरोध पैरामीटर आमतौर पर लॉग इन नहीं होते हैं। कुकीज़ को किसी भी मामले में लॉग इन होने की संभावना नहीं है। (उदाहरण)
यह POST के पक्ष में एक बहुत कमजोर तर्क है। सबसे पहले, अन-इनक्रिप्टेड ट्रैफ़िक को इसकी संपूर्णता में लॉग किया जा सकता है; दुर्भावनापूर्ण प्रॉक्सी के पास पहले से ही वह सब कुछ है जिसकी उसे आवश्यकता है। दूसरे, अनुरोध पैरामीटर एक हमलावर के लिए सीमित उपयोग के होते हैं: उन्हें वास्तव में कुकीज़ की क्या आवश्यकता है, इसलिए यदि उनके पास केवल प्रॉक्सी लॉग हैं, तो वे GET या POST URL पर हमला करने में सक्षम होने की संभावना नहीं है।
लॉगिन अनुरोधों के लिए एक अपवाद है: इनमें उपयोगकर्ता का पासवर्ड होता है। प्रॉक्सी लॉग में इसे सहेजना हमले के एक वेक्टर को खोलता है जो POST के मामले में अनुपस्थित है। हालाँकि, सादे HTTP पर लॉगिन स्वाभाविक रूप से असुरक्षित है।
प्रॉक्सी कैश
कैशिंग प्रॉक्सी GET प्रतिक्रियाओं को बनाए रख सकते हैं, लेकिन POST प्रतिक्रियाएं नहीं। यह कहते हुए कि, GET प्रतिक्रियाओं को URL को POST हैंडलर में बदलने की तुलना में कम प्रयास से गैर-उपलब्ध किया जा सकता है।
HTTP "संदर्भकर्ता"
यदि उपयोगकर्ता GET अनुरोध के जवाब में दिए गए पृष्ठ से किसी तृतीय पक्ष की वेबसाइट पर नेविगेट करना चाहते थे, तो उस तृतीय पक्ष वेबसाइट को सभी GET अनुरोध पैरामीटर देखने को मिलते हैं।
"तीसरी पार्टी के लिए अनुरोध मापदंडों को प्रकट करता है" की श्रेणी के अंतर्गत आता है, जिनकी गंभीरता उन मापदंडों में मौजूद है पर निर्भर करती है। POST अनुरोध स्वाभाविक रूप से इसके लिए प्रतिरक्षा है, हालांकि GET अनुरोध का फायदा उठाने के लिए एक हैकर को सर्वर की प्रतिक्रिया में अपनी वेबसाइट पर एक लिंक डालने की आवश्यकता होगी।
ब्राउज़र का इतिहास
यह "प्रॉक्सी लॉग" तर्क के समान है: जीईटी अनुरोधों को उनके मापदंडों के साथ ब्राउज़र इतिहास में संग्रहीत किया जाता है। यदि मशीन में उनकी भौतिक पहुँच है तो हमलावर आसानी से इन्हें प्राप्त कर सकते हैं।
ब्राउज़र रिफ्रेश एक्शन
जैसे ही उपयोगकर्ता "ताज़ा" हिट करेगा, ब्राउज़र एक GET अनुरोध पुनः प्राप्त करेगा। ऐसा तब हो सकता है जब शटडाउन के बाद टैब बहाल करना। किसी भी कार्रवाई (कहते हैं, एक भुगतान) इस प्रकार चेतावनी के बिना दोहराया जाएगा।
ब्राउज़र चेतावनी के बिना एक POST अनुरोध को फिर से नहीं करेगा।
यह डेटा बदलने के लिए केवल POST अनुरोधों का उपयोग करने का एक अच्छा कारण है, लेकिन दुर्भावनापूर्ण व्यवहार और इसलिए, सुरक्षा से इसका कोई लेना-देना नहीं है।
तो मुझे क्या करना चाहिए?
- डेटा को बदलने के लिए केवल POST अनुरोधों का उपयोग करें, मुख्य रूप से गैर-सुरक्षा-संबंधी कारणों के लिए।
- लॉगिन फ़ॉर्म के लिए केवल POST अनुरोधों का उपयोग करें; अन्यथा हमला करने वाले वैक्टर का परिचय देते हैं।
- यदि आपकी साइट संवेदनशील संचालन करती है, तो आपको वास्तव में किसी ऐसे व्यक्ति की आवश्यकता है जो जानता है कि वे क्या कर रहे हैं, क्योंकि यह एक उत्तर में कवर नहीं किया जा सकता है। आपको HTTPS, HSTS, CSP का उपयोग करना होगा, SQL इंजेक्शन, स्क्रिप्ट इंजेक्शन (XSS) , CSRF और अन्य चीज़ों का एक gazillion जो आपके प्लेटफ़ॉर्म के लिए विशिष्ट हो सकता है (जैसे विभिन्न असाइनमेंट में सामूहिक असाइनमेंट भेद्यता का उपयोग करने के लिए : ASP.NET MVC , पटरियों पर रूबी , आदि)। कोई भी एक चीज नहीं है जो "सुरक्षित" (शोषक नहीं) और "सुरक्षित नहीं" के बीच अंतर करेगी।
HTTPS से अधिक, POST डेटा एनकोडेड है, लेकिन क्या URL को किसी तृतीय पक्ष द्वारा सूँघा जा सकता है?
नहीं, उन्हें सूँघा नहीं जा सकता। लेकिन URL को ब्राउज़र इतिहास में संग्रहीत किया जाएगा।
क्या यह कहना उचित होगा कि POST या GET में संवेदनशील डेटा रखने से बचने के लिए सबसे अच्छा अभ्यास है और इसके बजाय संवेदनशील जानकारी को संभालने के लिए सर्वर साइड कोड का उपयोग करना?
यह निर्भर करता है कि यह कितना संवेदनशील है, या अधिक विशेष रूप से, किस तरह से है। जाहिर है कि क्लाइंट इसे देखेगा। ग्राहक के कंप्यूटर पर भौतिक पहुंच वाला कोई भी व्यक्ति इसे देखेगा। जब आप इसे वापस भेजते हैं तो क्लाइंट इसे खराब कर सकता है। यदि वे मामले हैं तो हाँ, सर्वर पर संवेदनशील डेटा रखें और इसे छोड़ने न दें।