2014-10-16 3 views
15

मुझे पता है कि पहले से ही कोरस से संबंधित बहुत सारे प्रश्न हैं लेकिन वे उत्तर देने के लिए प्रतीत नहीं होते हैं मेरा प्रश्न।Angularjs: 'वाइल्डकार्ड' * 'का उपयोग' एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन 'हेडर में नहीं किया जा सकता है जब क्रेडेंशियल्स ध्वज सत्य है

तो मेरे पास AngularJS में एक क्लाइंट ऐप लिखा गया है जिसका उपयोग मोबाइल ऐप (अपाचे कॉर्डोवा के साथ) बनाने के लिए किया जाएगा। एचटीएमएल फाइलें और जावास्क्रिप्ट फाइलें मोबाइल डिवाइस से लोड की जाएंगी। जब मैं इसे अनुकरण करता हूं और मैं आरईएसटी एपीआई सर्वर को अनुरोध भेजता हूं तो मुझे पहले "नो 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' हेडर अनुरोधित संसाधन पर मौजूद है। उत्पत्ति 'http://localhost:82' इसलिए एक्सेस की अनुमति नहीं है"। इसलिए मैंने हेडर जोड़ा ("एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: *"); मेरे PHP रीस्ट एपीआई सर्वर में। मैं एक विशिष्ट डोमेन निर्दिष्ट नहीं कर सकता क्योंकि अनुरोध मोबाइल उपकरणों से आएंगे।

अब मुझे "वाइल्डकार्ड '*' का उपयोग 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' हेडर में नहीं किया जा सकता है जब क्रेडेंशियल्स ध्वज सत्य होता है।"

मुझे अंत में एक समाधान मिला लेकिन मुझे यकीन नहीं है कि इसे इस तरह रखना सुरक्षित है।

मेरी php REST API सर्वर में मैं जोड़ा इस:

if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Credentials: true"); 
    header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']); 
    header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type"); 
    header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT"); 
} 

कृपया काम करने का इस तरह के संबंध में सलाह। अगर यह सुरक्षित नहीं है या कोई अच्छा नहीं है, तो क्या आप कृपया मुझे बता सकते हैं कि इस मुद्दे को कैसे हल किया जाए?

बहुत बहुत धन्यवाद!

+0

क्या आप सुनिश्चित हैं कि आपको एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र सेट करने की आवश्यकता है: सत्य, उस शीर्षलेख के बारे में अधिक जानकारी: http://stackoverflow.com/a/24689738/1956540 – BatteryAcid

+1

सुनिश्चित नहीं है कि आप जानते हैं या नहीं, लेकिन " क्रेडेंशियल्स ध्वज सत्य है "प्रतिक्रिया पर 'एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र: सत्य' शीर्षलेख का संदर्भ नहीं देता है - यह' request.withCredentials = true' को संदर्भित करता है। (http://stackoverflow.com/questions/34078676/access-control-allow-origin-not-allowed-when-credentials-flag-is-true-but/42108718#42108718) – Andy

उत्तर

10

प्रतिक्रिया केवल एक्सेस-कंट्रोल-स्वीट-हेडर में स्वीकृत शीर्षलेख होना चाहिए, वाइल्डकार्ड का उपयोग न करें।

जहाँ तक यह सुरक्षित होने के रूप में, इस post about CORS में @Jules से टिप्पणी पर ध्यान दें:

ध्यान दें कि HTTP उत्पत्ति मूल्य वापस अनुमति मूल के रूप में भेजने के किसी साथ आप के लिए अनुरोध भेजने के लिए अनुमति देगा कुकीज, इस प्रकार संभावित रूप से किसी उपयोगकर्ता से से सत्र चुरा रहा है, जिसने आपकी साइट में लॉग इन किया था, फिर हमलावर का पृष्ठ देखा। आप या तो '*' (जो सत्र चोरी को रोकने वाले कुकीज़ को अस्वीकार कर देगा) या विशिष्ट डोमेन भेजना चाहते हैं जिसके लिए आप साइट को काम करना चाहते हैं।

भी देखें उदाहरण के लिए निम्नलिखित:

Wildcard not accepted in Access-Control-Allow-Headers

Specify headers Access-Control-Allow-Headers


वैकल्पिक दृष्टिकोण

तुम बस करने के लिए मूल हेडर सेट कर सकते हैं:

Access-Control-Allow-Origin: * 

आप अपने अनुरोध को निकालने में कुकीज़ को शामिल करने की जरूरत नहीं है:

Access-Control-Allow-Credentials: true 

पहुंच-नियंत्रण-अनुमति दें-हेडर से वाइल्डकार्ड निकालें और प्राधिकरण जोड़ने और फिर के हिस्से के रूप कि हैडर पारित बजाय एक कुकी में साख गुजर, पूर्व के प्राधिकरण के लिए आपके अनुरोध,:

Authorization: Basic a2lkMT== 

इसके अलावा, अनुमति तरीकों के विकल्प जोड़ें।

+1

जैसा कि वर्णन किया गया है "एक्सेस-कंट्रोल-अनुमति -ऑर्गिन: * "काम नहीं करता है। मुझे कुकीज और "एक्सेस-कंट्रोल-ऑब्जेक्ट-उत्पत्ति: *" के संयोजन की आवश्यकता है और कुकीज़ भेजने की अनुमति नहीं है। – mvermand

+1

ठीक है, यदि आप अनुमति-प्रमाण-पत्रों का उपयोग करना चाहते हैं तो आप वाइल्डकार्ड का उपयोग नहीं कर सकते: http://stackoverflow.com/a/19744754/1956540 – BatteryAcid

+0

बेहतर प्रतिबिंबित प्रश्न – BatteryAcid

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

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