2013-03-19 4 views
13

हम स्थानीय स्तर पर चल रहा है एक सर्वर के लिए एक AJAX अनुरोध पोस्ट कर रहे हैं करने के लिए मूल हेडर को जोड़े, यानीक्रोम एक ही मूल के अनुरोध

xhr.open("POST", "http://localhost:9000/context/request"); 
xhr.addHeader(someCustomHeaders); 
xhr.send(someData); 

पेज है कि इस जावास्क्रिप्ट निष्पादित किया जा रहा है भी स्थानीय होस्ट से कार्य किया जा रहा है: 9000, यानी यह पूरी तरह से एक ही मूल अनुरोध की तरह दिखता है।

हालांकि, किसी कारण के लिए, गूगल क्रोम हमेशा जिसके परिणामस्वरूप अनुरोध में कोई उत्पत्ति हैडर सेट, झूठी धारणा पर आधारित अनुरोध ब्लॉक करने के लिए है कि यह CORS अनुरोध है हमारे सर्वर के कारण।

यह फ़ायरफ़ॉक्स में नहीं होता है।

इसके अलावा, न तो फ़ायरफ़ॉक्स और न ही क्रोम एक विकल्प preflight अनुरोध है, जो भ्रामक है भेज रहे हैं; उत्पत्ति और कस्टम शीर्षलेख सर्वर द्वारा अनुमत सुनिश्चित करने के लिए पहले प्रीफ्लोइटिंग के बिना मूल शीर्षलेख सेट क्यों करें?

किसी को भी पता है कि इस मामले में चल रहा है करता है? क्या हम कॉर्स स्पेस को गलत समझ रहे हैं?

+0

http://seclab.stanford.edu/websec/csrf/csrf.ppt देखें जो उत्तर देता है कि उत्पत्ति हेडर समान-मूल POST अनुरोधों के लिए क्यों अच्छा है। यह एक सीएसआरएफ सुरक्षा तंत्र है। – user239558

उत्तर

22

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

मैं Host शीर्षलेख की जांच करने की अनुशंसा करता हूं, और यदि यह Origin शीर्षलेख में डोमेन से मेल खाता है, तो अनुरोध को CORS के रूप में न मानें। हेडर कुछ इस तरह दिखाई:

Host: example.com 
Origin: http://example.com 

ध्यान दें कि Origin, योजना (HTTP/HTTPS), डोमेन और बंदरगाह होगा जबकि Host केवल डोमेन और बंदरगाह होगा।

+0

यह बहुत समझ में आता है - हम कॉरस-फ़िल्टर को व्यवस्थित रूप से बदल देंगे। धन्यवाद! –

13
आरएफसी 6454 के अनुसार

- वेब उत्पत्ति संकल्पना - उत्पत्ति की उपस्थिति वास्तव में किसी भी HTTP अनुरोध के लिए कानूनी, एक ही मूल के अनुरोध भी शामिल है:

http://tools.ietf.org/html/rfc6454#section-7.3

"उपयोगकर्ता एजेंट किसी HTTP अनुरोध में कोई उत्पत्ति हेडर फ़ील्ड शामिल हो सकते हैं। "

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