2010-10-13 14 views
5

हमारे पास एक आंतरिक वेब एप्लिकेशन है जो एक संग्रह के रूप में कार्य करता है जिसके लिए उपयोगकर्ता फ़ाइलें अपलोड कर सकते हैं। ये फ़ाइलें HTML पृष्ठों सहित कोई प्रारूप हो सकती हैं।एचटीएमएल डाउनलोड में एक्सएसएस से कैसे बचा जा सकता है?

हमने आईई 8 की तुलना में परीक्षण किया है, यदि आप एक HTML फ़ाइल डाउनलोड करते हैं जिसमें आपकी कुकीज़ तक पहुंचने का प्रयास करने वाली कुछ स्क्रिप्ट शामिल है और डाउनलोड करने के बाद, आप "ओपन" विकल्प चुनते हैं, स्क्रिप्ट निष्पादित होती है और आपकी कुकी जानकारी को बिना बिल्कुल समस्याएं

दरअसल, वह स्क्रिप्ट सर्वर को कॉल करने के लिए XmlHttpRequest ऑब्जेक्ट का उपयोग कर सकती है और फ़ाइल डाउनलोड करने वाले उपयोगकर्ता के सत्र में कुछ दुर्भावनापूर्ण संचालन कर सकती है।

क्या इससे बचने का कोई तरीका है? हमने परीक्षण किया है कि क्रोम और फ़ायरफ़ॉक्स दोनों ऐसा नहीं होने देते हैं। आईई 8 सहित किसी भी ब्राउज़र में इस व्यवहार से कैसे बचा जा सकता है?

+2

वास्तव में "ओपन" क्या करता है? ब्राउज़र में पेज दिखाओ? यदि हां, तो ऐसा होने पर पृष्ठ का URL क्या होता है? – bzlm

+0

@bzlm: यह किसी भी अनुलग्नक की तरह है; यदि आप (जो सामग्री-स्वभाव) डाउनलोड खिड़की के लिए संकेत करने के लिए ब्राउज़र के लिए मजबूर है, तो आप अभी भी खुला क्लिक कर सकते हैं, और यह इसे लोड करने के लिए इस्तेमाल यूआरएल है, जो अपने कुकीज़ के रूप में एक ही डोमेन पर स्पष्ट रूप से है का उपयोग कर खोलता है, इसलिए की मेरी सुझाव एक वैकल्पिक डोमेन पर चल रहा है (डाउनलोड)। –

+0

@bzlm सही रास्ते पर है: यदि आप एक HTML फ़ाइल स्थानीय रूप से खोलते हैं, तो यह एक डोमेन नीति के कारण एक दूरस्थ सर्वर करने के लिए कुकीज़ का उपयोग, और न ही अजाक्स अनुरोध जारी करने के, नहीं कर सकेंगे। केवल अगर यह संभव है कि सर्वर पर सीधे खोला गया है। –

उत्तर

5

अरबी सामग्री अपलोड करने की अनुमति न दें। यह विशेष रूप से एक भयानक विचार है।

एक संभावित "समाधान" केवल उस डोमेन पर अविश्वसनीय अपलोड होस्ट करने के लिए हो सकता है जिसमें कोई कुकी नहीं है और उपयोगकर्ता किसी भी तरह से किसी भी ट्रस्ट को संबद्ध नहीं करता है। यह एक "समाधान" होगा, लेकिन निश्चित रूप से आदर्श नहीं है।

कुछ और व्यावहारिक विकल्प प्राधिकरण-आधारित प्रक्रिया हो सकते हैं, जहां प्रत्येक फ़ाइल स्वचालित समीक्षा के माध्यम से जाती है और फिर स्वचालित सफाई/विश्लेषण चरण की मैन्युअल पुष्टि होती है।

हालांकि सभी सामान्य लोगों को ऐसा करने की अनुमति देना बहुत बुरा विचार है।

+1

+1 एक अलग डोमेन पर अपलोड को संग्रहीत करने के लिए +1 और सामान्य धारणा है कि यह हमेशा खतरनाक है –

+0

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

+0

[गिटहब रिलीज] (https://github.com/cirosantilli/test/releases/tag/3.0) किसी भी एक्सटेंशन की अनुमति देता है और S3 के माध्यम से डोमेन समाधान का उपयोग करने लगता है। ड्रॉपबॉक्स भी मनमाने ढंग से फ़ाइल प्रकार की अनुमति देता है। –

1

यदि आपको वास्तव में उपयोगकर्ताओं को HTML फ़ाइलों को अपलोड करने की आवश्यकता है, तो आपको यह सुनिश्चित करना चाहिए कि इस निर्देशिका में HTML फ़ाइलों को टेक्स्ट/HTML या इसी तरह के बजाय माइम प्रकार टेक्स्ट/सादे के साथ परोसा जाता है।

यह खुली फ़ाइलों को ब्राउज़र में स्क्रिप्ट निष्पादित करने से रोक देगा। यदि आप अपाचे का उपयोग कर रहे हैं, तो AddType निर्देश देखें।

+0

यह एक अच्छा सुझाव है, और यह चाल कर सकता है। मैं अभी भी एक ही डोमेन से सामग्री की सेवा करने के बारे में चिंतित हूं, लेकिन मुझे लगता है कि यह संभवतः परवाह किए बिना किया जाना चाहिए। –

+0

सामग्री स्नीफिंग से सावधान रहें। चूंकि अज्ञात फ़ाइलों के लिए डिफ़ॉल्ट रूप से अपाचे जहाजों को 'टेक्स्ट/सादा' के साथ जहाजों के रूप में, ब्राउज़र को वास्तविक प्रकार अनुमान लगाने के लिए आमंत्रण के रूप में 'टेक्स्ट/सादे' का इलाज करने के लिए मजबूर होना पड़ता है। – Kornel

4

सुरक्षा बिंदु से यह वास्तव में एक बुरा विचार है। फिर भी, यदि आप ऐसा करना चाहते हैं, तो HTTP प्रतिक्रिया शीर्षलेख Content-disposition: attachment शामिल करें यह ब्राउज़र को खोलने के बजाय फ़ाइल डाउनलोड करने के लिए मजबूर करेगा। अपाचे में, यह Header set Content-disposition "attachment" को .htaccess फ़ाइल में जोड़कर किया जाता है। के रूप में जवाब में से एक में उल्लेख किया

ध्यान दें कि यह एक बुरा विचार है सिर्फ Content-type: text/plain जोड़ने के लिए है, क्योंकि यह इंटरनेट एक्सप्लोरर के लिए काम नहीं करेगा। जब IE को टेक्स्ट/सादा सामग्री-प्रकार हेडर के साथ फ़ाइल प्राप्त होती है, तो यह उसके MIME स्निफ़र को चालू करता है जो फ़ाइल की वास्तविक सामग्री-प्रकार को परिभाषित करने का प्रयास करता है (क्योंकि कुछ सर्वर टेक्स्ट/सादा के साथ सभी फाइलें भेजते हैं)। यदि यह किसी फ़ाइल के अंदर HTML कोड को पूरा करता है, तो यह ब्राउज़र को टेक्स्ट/html के रूप में फ़ाइल करने के लिए मजबूर करेगा और इसे प्रस्तुत करेगा।

+0

[यह ब्लॉग पोस्ट] (http://i8jesus.com/?p=64) कहता है कि केवल 'सामग्री-विस्थापन' पर्याप्त नहीं है, लेकिन मुझे यह जानने के लिए पर्याप्त जानकारी नहीं है कि यह कितना विश्वसनीय है और यदि अभी भी लागू होता है। –

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