अगर आपको कॉन्टेंट की सुरक्षा के बारे में नीति (सीएसपी) के बारे में नहीं पता है, तो कॉन्टेंट की सुरक्षा के बारे में जानकारी शुरुआत करने के लिए, नीति का इस्तेमाल करना एक अच्छा तरीका है. उस दस्तावेज़ में, सीएसपी के बारे में ज़्यादा जानकारी दी गई है; Chrome ऐप्लिकेशन सीएसपी में ज़्यादा विकल्प नहीं हैं.
सीएसपी एक नीति है, जिसे क्रॉस-साइट स्क्रिप्टिंग से जुड़ी समस्याओं को कम करने के लिए इस्तेमाल किया जाता है. साथ ही, हम सभी जानते हैं कि क्रॉस-साइट स्क्रिप्टिंग खराब है. हम आपको यह भरोसा दिलाने की कोशिश नहीं करेंगे कि सीएसपी एक नई नीति है. इसमें बहुत काम करना पड़ता है; आपको बुनियादी कामों को अलग तरीके से करने का तरीका सीखना होगा.
इस दस्तावेज़ का मकसद यह बताना है कि Chrome ऐप्स के लिए सीएसपी नीति क्या है, का पालन करने की ज़रूरत है और इन बुनियादी कामों को अभी भी सीएसपी का पालन करने वाला.
Chrome ऐप्स के लिए सीएसपी क्या है?
Chrome ऐप्स की सामग्री सुरक्षा नीति आपको निम्न करने से रोकती है:
- आप अपने Chrome ऐप्लिकेशन पेज में इनलाइन स्क्रिप्टिंग का इस्तेमाल नहीं कर सकते. पाबंदी की वजह से,
<script>
के दोनों ब्लॉक में पाबंदी लगी है और इवेंट हैंडलर (<button onclick="...">
). - वीडियो और ऑडियो को छोड़कर, अपने ऐप्लिकेशन की किसी भी फ़ाइल में किसी भी बाहरी संसाधन का रेफ़रंस नहीं दिया जा सकता संसाधन). किसी iframe में बाहरी संसाधन एम्बेड नहीं किए जा सकते.
- स्ट्रिंग-टू-JavaScript तरीकों, जैसे कि
eval()
औरnew Function()
का इस्तेमाल नहीं किया जा सकता.
इसे नीति की इस वैल्यू का इस्तेमाल करके लागू किया जाता है:
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 ऐप्लिकेशन में पैकेज कर दिया जाता है).
"लेकिन फिर मैं यह कैसे करूं..."
ऐसा हो सकता है कि टेंप्लेट वाली लाइब्रेरी का इस्तेमाल किया जा रहा हो और इनमें से कई सीएसपी के साथ काम न करें. यह भी हो सकता है कि आप अपने ऐप्लिकेशन में बाहरी संसाधनों (बाहरी इमेज, वेबसाइटों का कॉन्टेंट) को ऐक्सेस करना चाहें.
टेंप्लेट बनाने के लिए लाइब्रेरी का इस्तेमाल करना
ऐसी लाइब्रेरी का इस्तेमाल करें जिसमें पहले से कंपाइल किए गए टेंप्लेट उपलब्ध हों और आप पूरी तरह से तैयार हों. आप अब भी ऐसी लाइब्रेरी का इस्तेमाल कर सकते हैं जिसे प्रीकंपाइलेशन की सुविधा नहीं देती है. हालांकि, इसके लिए आपको कुछ काम करना होगा और कुछ पाबंदियां भी हैं.
आपको जिस कॉन्टेंट को 'eval' करना है उसे अलग करने के लिए, आपको सैंडबॉक्सिंग का इस्तेमाल करना होगा करते हैं. सैंडबॉक्सिंग, आपके बताए गए कॉन्टेंट पर सीएसपी को बढ़ा देती है. अगर आप Chrome की सबसे शक्तिशाली Chrome का इस्तेमाल करना चाहते हैं, आपके Chrome ऐप्लिकेशन के एपीआई के साथ-साथ, आपका सैंडबॉक्स किया गया कॉन्टेंट, इन एपीआई के साथ सीधे तौर पर इंटरैक्ट नहीं कर सकता (देखें सैंडबॉक्स का लोकल कॉन्टेंट).
रिमोट रिसॉर्स ऐक्सेस करें
रिमोट रिसॉर्स को XMLHttpRequest
से फ़ेच किया जा सकता है. साथ ही, उन्हें blob:
, data:
या
filesystem:
यूआरएल (बाहरी संसाधनों का रेफ़रंस देना देखें).
वीडियो और ऑडियो को रिमोट सेवाओं से लोड किया जा सकता है, क्योंकि जब ये दोनों काम करते हैं, तो ऑफ़लाइन या कमज़ोर कनेक्टिविटी.
वेब कॉन्टेंट एम्बेड करें
iframe का इस्तेमाल करने के बजाय, वेबव्यू टैग का इस्तेमाल करके बाहरी यूआरएल को कॉल किया जा सकता है (एम्बेड करें बाहरी वेब पेज).