2016-01-16 8 views
7
लोड करने के लिए

संदर्भ: Prevent HTTP Basic Authentication from displaying prompt for imagesअंक छवियों

आदेश में इस संभावित "शोषण", मैं सभी [img] BBCodes के लिए crossorigin="anonymous" जोड़ा से मेरे उपयोगकर्ता द्वारा निर्मित सामग्री की रक्षा के लिए।

ठीक है, यह आईई 11 में काम करता है: जब मैंने शोषण का परीक्षण किया, तब छवि ने प्रमाणीकरण संवाद (कैश अक्षम और अच्छे माप के लिए अलग-अलग यूआरएल के साथ परीक्षण) को ट्रिगर नहीं किया।

लेकिन क्रोम में, शोषण काम नहीं करता है ... क्योंकि छवियों को बिल्कुल लोड नहीं किया जा रहा है। इसके बजाय मैं जाहिरा तौर पर काफी आम त्रुटि हो रही है:

Image from origin 'XXXXX' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'YYYYY' is therefore not allowed access.

हो सकता है कि मेरी समझ गलत है, लेकिन मैंने सोचा कि विशेषता का "anonymous" मूल्य यह काम करने की अनुमति होगी।

क्या मुझे कुछ याद आ रहा है, और यदि ऐसा है तो इस मुद्दे के खिलाफ सुरक्षा के लिए अन्य विकल्प क्या हैं?

उत्तर

9

मेरी समझ के अनुसार, सबसे पहले, आप कहने का मतलब है कि छवियों को IE में लोड नहीं किया गया था। जो सही है! इस तरह इसे काम करना है।

दूसरा (& अंत में), क्रोम का व्यवहार भी सही है।

प्रक्रिया/विवरण:

सर्वर मूल साइट के लिए साख नहीं देता (स्थापना करके पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति बेनामी करने के लिए), छवि दागी किया जाएगा और इसके उपयोग प्रतिबंधित है।

अब, यदि आपके पास cross-origin image है तो आप इसे कैनवास में कॉपी कर सकते हैं लेकिन यह "taints" कैनवास है जो आपको इसे पढ़ने से रोकता है (ताकि आप छवियों को "चोरी" या "डाउनलोड" नहीं कर सकें)। हालांकि, सीओआरएस सर्वर का उपयोग करके जहां छवि संग्रहीत की जाती है, ब्राउज़र को बता सकता है कि क्रॉस-मूल पहुंच की अनुमति है और इस प्रकार आप कैनवास के माध्यम से छवि डेटा तक पहुंच सकते हैं।

जब हेडर एक ही उत्पत्ति से नहीं है यानी, यदि संसाधन को कोर अनुरोध के बिना लाया जाता है (यानी उत्पत्ति: HTTP शीर्षलेख भेजने के बिना), और जैसा कि यह अमान्य हो जाता है, तो, यह गणना की जाती है जैसे गणना कीवर्ड अज्ञात इस्तेमाल किया गया था।

तो मेरा अनुमान है कि शून्य या तो मौजूद नहीं है या अमान्य होने के मामले में अज्ञात है।

तो, आप देखते हैं कि क्रोम में त्रुटि का मतलब है कि आईई क्या कर रहा है।


कुछ संदर्भों कि

नहीं एक सीधा जवाब है, लेकिन, सहायक links- हालांकि

आशा है कि यह मदद करता है! :) मुबारक कोडिंग!

+0

मुख्य मुद्दा जो मैंने हाल ही में किया है, यह नहीं है कि "हैक" विफल रहता है, बल्कि यह कि क्रोम सभी छवियों को पूरी तरह से अवरुद्ध करता है, उनके पास एक्सेस-कंट्रोल हेडर नहीं है। 'Crossorigin =" अज्ञात "विशेषता को हटाने से छवियां फिर से काम करती हैं, लेकिन हैक को भेद्यता बहाल कर देती है। –

+1

हां। मुझे यकीन नहीं है कि क्या मैं स्पष्ट रूप से संवाद करने में सक्षम नहीं हूं, लेकिन, जो आप कह रहे हैं वह अपेक्षित व्यवहार है। – bozzmob

+2

बोज्मोब अच्छा स्पष्टीकरण! और @NiettheDarkAbsol, हां, क्रोम सभी छवियों को अवरुद्ध कर देगा यदि आप एक्सेस-कंट्रोल हेडर नहीं भेजते हैं क्योंकि क्रोम विश्वास करने की स्थिति में नहीं होगा यदि उपयोगकर्ता अनुरोध वास्तविक है या नहीं। इस तरह अभिगम नियंत्रण तंत्र काम करता है। –

1

के अनुसार, मैं शोध किया,

Firstly What do you mean by Tainted canvas:

Although you can use images without CORS approval in your canvas, doing so taints the canvas. Once a canvas has been tainted, you can no longer pull data back out of the canvas. For example, you can no longer use the canvas toBlob(), toDataURL(), or getImageData() methods; doing so will throw a security error.
ref: https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image

CORS settings attributes:

In HTML5, some HTML elements which provide support for CORS, such as img or video , have a crossorigin attribute (crossOrigin property), which lets you configure the CORS requests for the element's fetched data. By default (that is, when the attribute is not specified), CORS is not used at all.
The "anonymous" keyword means that there will be no exchange of user credentials via cookies, client-side SSL certificates or HTTP authentication

के बाद से, छवि आप लिंक कर रहे हैं CORS-सक्षम, आप Access-Control-Allow-Origin त्रुटि हो रही है नहीं है।

समस्या को ठीक करने के लिए, न केवल क्रॉसऑरिगिन विशेषता करें बल्कि उचित शीर्षलेखों को भेजने की आवश्यकता है। आप इसे क्रॉसऑरिगिन पर use-credentials पर सेट कर सकते हैं जो प्रमाण-पत्र अनुरोध हेडर सेट करता है - जो सर्वर यह तय करने के लिए उपयोग कर सकता है कि आपके पास सामग्री का अधिकार है या नहीं। जब CORS शीर्षलेख किसी छवि के लिए सर्वर से वापस भेजे जाते हैं, और उस छवि का उपयोग कैनवास पर किया जाता है, तो मूल-साफ़ ध्वज सत्य होता है।