2016-09-27 12 views
9

के साथ पोस्ट अनुरोधों के लिए सीओआरएस में कोई प्रीफलाइट क्यों नहीं है I CORS POST अनुरोधों के सुरक्षा पहलुओं के बारे में थोड़ा उलझन में हूं। मुझे पता है कि इस विषय के बारे में ऑनलाइन जानकारी खो गई है, लेकिन मुझे अपने प्रश्नों का एक निश्चित उत्तर नहीं मिला।मानक सामग्री-प्रकार

यदि मैं इसे सही ढंग से समझता हूं, तो समान मूल नीति का लक्ष्य सीएसआरएफ हमलों को रोकने के लिए है और सीओआरएस का लक्ष्य संसाधन साझाकरण को सक्षम करना है (और केवल अगर) सर्वर होस्ट किए गए एप्लिकेशन के साथ अपना डेटा साझा करने के लिए सहमत है अन्य साइटों (उत्पत्ति)।

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

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

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

मेरा निष्कर्ष यह है कि मानक सामग्री-प्रकार और शीर्षलेखों के साथ जाली पोस्ट अनुरोधों के खिलाफ एकमात्र सुरक्षा ऊपर वर्णित तकनीक है (या एक समान)। किसी भी अन्य गैर-अक्षम 'अनुरोध जैसे कि पुट या डिलीट, या जेसन-सामग्री के साथ एक पोस्ट के लिए, तकनीक का उपयोग करने की आवश्यकता नहीं है क्योंकि सीओआरएस एक' सुरक्षित 'विकल्प अनुरोध करता है।

सीओआरएस के लेखकों ने प्रीफलाइट अनुरोधों से इन पोस्ट छूट को क्यों छोड़ दिया और इसलिए ऊपर वर्णित तकनीक को नियोजित करने के लिए इसे आवश्यक बना दिया?

उत्तर

11

CORS - What is the motivation behind introducing preflight requests? और अन्य उत्तरों देखें।

कारण CORS application/x-www-form-urlencoded, multipart/form-data, या text/plain सामग्री प्रकार के लिए एक preflight करने के लिए ब्राउज़र की आवश्यकता नहीं है कि अगर ऐसा हुआ, कि CORS से अधिक प्रतिबंधक बनाने वाली इच्छित ब्राउज़र पहले से ही हमेशा की अनुमति दी है (और यह नहीं है सीओआरएस के बिना पहले से क्या संभव था पर नए प्रतिबंध लगाने के लिए सीओआरएस का इरादा)।

यह है कि, सीओआरएस के साथ, POST अनुरोध है कि आप पहले क्रॉस-उत्पत्ति कर सकते हैं प्रीफलाइट नहीं कर सकते हैं- क्योंकि ब्राउज़र पहले से ही कॉरस मौजूद होने से पहले उन्हें अनुमति देता है, और सर्वर उनके बारे में जानते थे। तो सीओआरएस उन "पुराने" प्रकार के अनुरोधों के बारे में कुछ भी नहीं बदलता है।

लेकिन सीओआरएस से पहले, ब्राउज़र आपको क्रॉस-उत्पत्ति application/json पोस्ट करने की अनुमति नहीं देंगे, और इसलिए सर्वर मान सकते हैं कि वे उन्हें प्राप्त नहीं करेंगे। यही कारण है कि उन "नए" अनुरोधों के लिए एक सीओआरएस प्रीफलाइट की आवश्यकता है, न कि "पुराने" लोगों के लिए - सर्वर पर हेड-अप देने के लिए कि यह एक अलग "नया" प्रकार का अनुरोध है जिसे उन्हें स्पष्ट रूप से ऑप्ट-इन करना होगा- समर्थन करने के लिए।

+5

दरअसल, हमने पोस्ट की अनुमति दी क्योंकि '

'पहले से ही किया गया था और कोई तरीका नहीं था कि हम' ' को प्रतिबंधित करने में सक्षम होंगे। – Anne

संबंधित मुद्दे