क्या यह ओवर-इंजीनियरिंग है अगर मैं किसी उपयोगकर्ता के जानबूझकर गलत काम (इसे हल्के ढंग से डालने के लिए) के खिलाफ सुरक्षा जोड़ता हूं, अगर उपयोगकर्ता को जो नुकसान हो सकता है वह मेरे कोड से संबंधित नहीं है?
स्पष्ट करने के लिए, मैं इस तरह एक साधारण JSON रेस्टफुल सेवा को उजागर कर रहा हूं:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
सेवा का मतलब केवल ब्राउज़र को गर्त में इस्तेमाल करना नहीं है, बल्कि केवल तृतीय पक्ष एप्लिकेशन से है, जो उपयोगकर्ता द्वारा नियंत्रित किया जाता है (जैसे फोन ऐप, डेस्कटॉप ऐप आदि)। साथ ही, सेवा स्वयं ही स्टेटलेस (यानी सत्र-कम) होनी चाहिए।
प्रमाणीकरण SSL पर मूल प्रमाणीकरण के साथ किया जाता है।
मैं इस तरह से एक संभव "हानिकारक" व्यवहार के बारे में बात कर रहा हूं:
उपयोगकर्ता एक ब्राउज़र में GET url में प्रवेश करता है (कोई कारण नहीं लेकिन ...)। ब्राउज़र बेसिक प्रमाणीकरण के लिए पूछता है, इसे प्रोसेस करता है, और वर्तमान ब्राउज़िंग सत्र के लिए ऑर्ट को संग्रहीत करता है। ब्राउज़र को बंद किए बिना, उपयोगकर्ता दुर्भावनापूर्ण वेब साइट पर जाता है, जिसमें एक दुर्भावनापूर्ण CSRF / XSRF जावास्क्रिप्ट है जो हमारी सेवा के लिए एक POST बनाता है।
उपरोक्त परिदृश्य अत्यधिक संभावना नहीं है, और मुझे पता है कि व्यावसायिक दृष्टिकोण से मुझे बहुत चिंता नहीं करनी चाहिए। लेकिन स्थिति में सुधार के लिए, क्या आपको लगता है कि अगर JSON POST डेटा में उपयोगकर्ता नाम / पासवर्ड आवश्यक है, तो क्या यह मदद करेगा?
या क्या मुझे बेसिक ऑथोरिटी को पूरी तरह से छोड़ देना चाहिए, GET से छुटकारा पाना चाहिए, और उनमें प्राधिकरण जानकारी के साथ केवल POST / PUT का उपयोग करना चाहिए? जैसा कि जानकारी प्राप्त गर्त GET भी संवेदनशील हो सकता है।
दूसरी तरफ, कस्टम हेडर का उपयोग शुद्ध रीस्ट कार्यान्वयन पर विचार करता है? मैं मूल प्रामाणिक को छोड़ सकता हूं, और कस्टम हेडर का उपयोग कर सकता हूं। इस तरह, एक ब्राउज़र से कम से कम सीएसआरएफ हमले से बचा जा सकता है, और जो अनुप्रयोग सेवा का उपयोग करते हैं, वे कस्टम हीथर में उपयोगकर्ता नाम / पासवर्ड सेट करेंगे। इस दृष्टिकोण के लिए बुरा है, कि अब एक ब्राउज़र से सेवा का उपभोग नहीं किया जा सकता है।