कॉन्टेंट की सुरक्षा के बारे में नीति

अगर आपको कॉन्टेंट की सुरक्षा के बारे में नीति (सीएसपी) के बारे में नहीं पता है, तो कॉन्टेंट की सुरक्षा के बारे में नीति के बारे में जानना एक अच्छा तरीका है. इस दस्तावेज़ में सीएसपी के वेब प्लैटफ़ॉर्म व्यू के बारे में पूरी जानकारी दी गई है. Chrome ऐप्लिकेशन के सीएसपी में डेटा को अपनी ज़रूरत के हिसाब से इस्तेमाल नहीं किया जा सकता.

सीएसपी की एक नीति है, जिसका मकसद क्रॉस-साइट स्क्रिप्टिंग की समस्याओं को कम करना है. साथ ही, हम सभी जानते हैं कि क्रॉस-साइट स्क्रिप्टिंग खराब है. हम आपको यह भरोसा दिलाने की कोशिश नहीं करेंगे कि सीएसपी एक आसान नीति है. आपको कुछ काम करना होगा. आपको बुनियादी कामों को अलग तरीके से करने का तरीका सीखना होगा.

इस दस्तावेज़ का मकसद आपको यह बताना है कि Chrome ऐप्स के लिए सीएसपी नीति क्या है, इसका पालन करने के लिए आपको क्या करना होगा, और आप अब भी इन बुनियादी कामों को सीएसपी के मुताबिक कैसे कर सकते हैं.

Chrome ऐप्लिकेशन का सीएसपी क्या है?

Chrome ऐप्लिकेशन की कॉन्टेंट सुरक्षा नीति आपको ये काम करने से रोकती है:

  • आपके Chrome ऐप्लिकेशन के पेजों में, इनलाइन स्क्रिप्टिंग का इस्तेमाल नहीं किया जा सकता. इस पाबंदी से <script> ब्लॉक और इवेंट हैंडलर (<button onclick="...">), दोनों पर प्रतिबंध है.
  • आप अपने ऐप्लिकेशन की किसी भी फ़ाइल में किसी बाहरी संसाधन का रेफ़रंस नहीं दे सकते (वीडियो और ऑडियो संसाधनों को छोड़कर). iframe में बाहरी रिसॉर्स को एम्बेड नहीं किया जा सकता.
  • eval() और new Function() जैसे JavaScript वाले तरीकों का इस्तेमाल नहीं किया जा सकता.

इसे इस नीति की वैल्यू के ज़रिए लागू किया जाता है:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

आपका Chrome ऐप्लिकेशन सिर्फ़ आपके ऐप्लिकेशन में मौजूद स्क्रिप्ट और ऑब्जेक्ट के बारे में बता सकता है. हालांकि, इसमें मीडिया फ़ाइलें शामिल नहीं हैं (ऐप्लिकेशन, पैकेज से बाहर के वीडियो और ऑडियो का इस्तेमाल कर सकते हैं). Chrome एक्सटेंशन से आप कॉन्टेंट की डिफ़ॉल्ट सुरक्षा नीति में छूट पा सकते हैं, जबकि Chrome ऐप्लिकेशन ऐसा नहीं करेंगे.

सीएसपी का पालन करने का तरीका

सभी JavaScript और सभी संसाधन स्थानीय होने चाहिए (हर चीज़ आपके Chrome ऐप्लिकेशन में पैकेज की जाती है).

"लेकिन फिर मैं यह कैसे करूं..."

ऐसा हो सकता है कि आप टेंप्लेट की लाइब्रेरी का इस्तेमाल कर रहे हों और इनमें से कई लाइब्रेरी सीएसपी के साथ काम नहीं करेंगी. हो सकता है कि आप अपने ऐप्लिकेशन में बाहरी संसाधन (बाहरी इमेज, वेबसाइटों का कॉन्टेंट) भी ऐक्सेस करना चाहें.

टेंप्लेट की लाइब्रेरी का इस्तेमाल करना

पहले से कंपाइल किए गए टेंप्लेट वाली लाइब्रेरी का इस्तेमाल करें और अब आप तैयार हैं. आप अब भी ऐसी लाइब्रेरी का इस्तेमाल कर सकते हैं जिसमें प्रीकंपाइलेशन की सुविधा नहीं होती, लेकिन इसके लिए आपको कुछ काम करने की ज़रूरत होगी और कुछ पाबंदियां भी हैं.

आपको सैंडबॉक्सिंग का उपयोग ऐसी किसी भी सामग्री को अलग करने के लिए करना होगा, जिसके लिए आप चीज़ें 'सेव' करना चाहते हैं. सैंडबॉक्सिंग, आपके चुने गए कॉन्टेंट पर सीएसपी को बढ़ाता है. अगर आपको अपने Chrome ऐप्लिकेशन में बहुत दमदार Chrome API इस्तेमाल करने हैं, तो सैंडबॉक्स किया गया कॉन्टेंट इन एपीआई से सीधे इंटरैक्ट नहीं कर पाएगा (सैंडबॉक्स लोकल कॉन्टेंट देखें).

रिमोट रिसॉर्स ऐक्सेस करें

XMLHttpRequest की मदद से, रिमोट रिसॉर्स फ़ेच किए जा सकते हैं और उन्हें blob:, data: या filesystem: यूआरएल की मदद से दिखाया जा सकता है. बाहरी संसाधनों के बारे में जानकारी देखें.

वीडियो और ऑडियो को रिमोट सेवाओं से लोड किया जा सकता है, क्योंकि ऑफ़लाइन या खराब कनेक्टिविटी में होने पर, इन सेवाओं का फ़ॉलबैक बेहतर तरीके से होता है.

वेब कॉन्टेंट एम्बेड करें

iframe का इस्तेमाल करने के बजाय, वेबव्यू टैग का इस्तेमाल करके बाहरी यूआरएल को कॉल किया जा सकता है (बाहरी वेब पेज एम्बेड करें देखें).