डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट्स के लिए कंटेंट सिक्योरिटी पॉलिसी (CSP) नॉन्स जेनरेशन की एक विस्तृत गाइड, जो फ्रंटएंड सुरक्षा को बढ़ाती है।
फ्रंटएंड कंटेंट सिक्योरिटी पॉलिसी नॉन्स जेनरेशन: डायनामिक स्क्रिप्ट्स को सुरक्षित करना
आज के वेब डेवलपमेंट परिदृश्य में, अपने फ्रंटएंड को सुरक्षित करना सर्वोपरि है। क्रॉस-साइट स्क्रिप्टिंग (XSS) हमले एक महत्वपूर्ण खतरा बने हुए हैं, और एक मजबूत कंटेंट सिक्योरिटी पॉलिसी (CSP) एक महत्वपूर्ण रक्षा तंत्र है। यह लेख CSP को नॉन्स-आधारित स्क्रिप्ट व्हाइटलिस्टिंग के साथ लागू करने के लिए एक व्यापक गाइड प्रदान करता है, जो डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट्स के लिए चुनौतियों और समाधानों पर ध्यान केंद्रित करता है।
कंटेंट सिक्योरिटी पॉलिसी (CSP) क्या है?
CSP एक HTTP रिस्पांस हेडर है जो आपको उन संसाधनों को नियंत्रित करने की अनुमति देता है जिन्हें यूजर एजेंट को किसी दिए गए पेज के लिए लोड करने की अनुमति है। यह अनिवार्य रूप से एक व्हाइटलिस्ट है जो ब्राउज़र को बताता है कि कौन से स्रोत विश्वसनीय हैं और कौन से नहीं। यह हमलावरों द्वारा इंजेक्ट की गई दुर्भावनापूर्ण स्क्रिप्ट को निष्पादित करने से ब्राउज़र को प्रतिबंधित करके XSS हमलों को रोकने में मदद करता है।
CSP डायरेक्टिव्स
CSP डायरेक्टिव्स विभिन्न प्रकार के संसाधनों, जैसे स्क्रिप्ट, स्टाइल, इमेज, फॉन्ट, और बहुत कुछ के लिए अनुमत स्रोतों को परिभाषित करते हैं। कुछ सामान्य डायरेक्टिव्स में शामिल हैं:
- `default-src`: एक फॉलबैक डायरेक्टिव जो सभी संसाधन प्रकारों पर लागू होता है यदि विशिष्ट डायरेक्टिव्स परिभाषित नहीं हैं।
- `script-src`: जावास्क्रिप्ट कोड के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `style-src`: CSS स्टाइलशीट के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `img-src`: छवियों के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `connect-src`: नेटवर्क अनुरोध करने के लिए अनुमत स्रोतों को निर्दिष्ट करता है (जैसे, AJAX, WebSockets)।
- `font-src`: फॉन्ट के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `object-src`: प्लगइन्स के लिए अनुमत स्रोतों को निर्दिष्ट करता है (जैसे, Flash)।
- `media-src`: ऑडियो और वीडियो के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `frame-src`: फ्रेम और आईफ्रेम के लिए अनुमत स्रोतों को निर्दिष्ट करता है।
- `base-uri`: उन यूआरएल को प्रतिबंधित करता है जिनका उपयोग `<base>` तत्व में किया जा सकता है।
- `form-action`: उन यूआरएल को प्रतिबंधित करता है जिन पर फॉर्म सबमिट किए जा सकते हैं।
नॉन्स की शक्ति
हालांकि `script-src` और `style-src` के साथ विशिष्ट डोमेन को व्हाइटलिस्ट करना प्रभावी हो सकता है, यह प्रतिबंधात्मक और बनाए रखने में मुश्किल भी हो सकता है। एक अधिक लचीला और सुरक्षित तरीका नॉन्स का उपयोग करना है। एक नॉन्स (नंबर यूज्ड वन्स) एक क्रिप्टोग्राफ़िक रैंडम नंबर है जो प्रत्येक अनुरोध के लिए उत्पन्न होता है। अपने CSP हेडर में और अपनी इनलाइन स्क्रिप्ट के `<script>` टैग में एक अद्वितीय नॉन्स शामिल करके, आप ब्राउज़र को केवल उन स्क्रिप्ट को निष्पादित करने के लिए कह सकते हैं जिनमें सही नॉन्स मान है।
नॉन्स के साथ उदाहरण CSP हेडर:
Content-Security-Policy: default-src 'self'; script-src 'nonce-{{nonce}}'
नॉन्स के साथ उदाहरण इनलाइन स्क्रिप्ट टैग:
<script nonce="{{nonce}}">console.log('Hello, world!');</script>
नॉन्स जेनरेशन: मूल अवधारणा
नॉन्स उत्पन्न करने और लागू करने की प्रक्रिया में आम तौर पर ये चरण शामिल होते हैं:
- सर्वर-साइड जेनरेशन: प्रत्येक आने वाले अनुरोध के लिए सर्वर पर एक क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम नॉन्स मान उत्पन्न करें।
- हेडर इंसर्शन: `Content-Security-Policy` हेडर में जेनरेट किए गए नॉन्स को शामिल करें, `{{nonce}}` को वास्तविक मान से बदलें।
- स्क्रिप्ट टैग इंसर्शन: प्रत्येक इनलाइन `<script>` टैग के `nonce` एट्रिब्यूट में वही नॉन्स मान इंजेक्ट करें जिसे आप निष्पादित करने की अनुमति देना चाहते हैं।
डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट्स के साथ चुनौतियां
हालांकि नॉन्स स्टैटिक इनलाइन स्क्रिप्ट के लिए प्रभावी हैं, डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट एक चुनौती पेश करती हैं। डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट वे हैं जो प्रारंभिक पेज लोड के बाद DOM में जोड़ी जाती हैं, अक्सर जावास्क्रिप्ट कोड द्वारा। केवल प्रारंभिक अनुरोध पर CSP हेडर सेट करने से ये डायनामिक रूप से जोड़ी गई स्क्रिप्ट्स कवर नहीं होंगी।
इस परिदृश्य पर विचार करें:
```javascript function injectScript(url) { const script = document.createElement('script'); script.src = url; document.head.appendChild(script); } injectScript('https://example.com/script.js'); ```यदि `https://example.com/script.js` को आपके CSP में स्पष्ट रूप से व्हाइटलिस्ट नहीं किया गया है, या यदि इसमें सही नॉन्स नहीं है, तो ब्राउज़र इसके निष्पादन को रोक देगा, भले ही प्रारंभिक पेज लोड में नॉन्स के साथ एक वैध CSP हो। ऐसा इसलिए है क्योंकि ब्राउज़र केवल CSP का मूल्यांकन *उस समय करता है जब संसाधन का अनुरोध/निष्पादन किया जाता है*।
डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट्स के लिए समाधान
CSP और नॉन्स के साथ डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट को संभालने के लिए कई दृष्टिकोण हैं:
1. सर्वर-साइड रेंडरिंग (SSR) या प्री-रेंडरिंग
यदि संभव हो, तो स्क्रिप्ट इंजेक्शन लॉजिक को सर्वर-साइड रेंडरिंग (SSR) प्रक्रिया में ले जाएं या प्री-रेंडरिंग तकनीकों का उपयोग करें। यह आपको क्लाइंट को पेज भेजे जाने से पहले सही नॉन्स के साथ आवश्यक `<script>` टैग उत्पन्न करने की अनुमति देता है। Next.js (React), Nuxt.js (Vue), और SvelteKit जैसे फ्रेमवर्क सर्वर-साइड रेंडरिंग में उत्कृष्टता प्राप्त करते हैं और इस प्रक्रिया को सरल बना सकते हैं।
उदाहरण (Next.js):
```javascript function MyComponent() { const nonce = getCspNonce(); // Function to retrieve the nonce return ( <script nonce={nonce} src="/path/to/script.js"></script> ); } export default MyComponent; ```2. प्रोग्रामेटिक नॉन्स इंजेक्शन
इसमें सर्वर पर नॉन्स उत्पन्न करना, इसे क्लाइंट-साइड जावास्क्रिप्ट के लिए उपलब्ध कराना, और फिर डायनामिक रूप से बनाए गए स्क्रिप्ट तत्व पर `nonce` एट्रिब्यूट को प्रोग्रामेटिक रूप से सेट करना शामिल है।
चरण:
- नॉन्स को एक्सपोज करें: प्रारंभिक HTML में नॉन्स मान को एम्बेड करें, या तो एक ग्लोबल वैरिएबल के रूप में या किसी तत्व पर डेटा एट्रिब्यूट के रूप में। इसे सीधे एक स्ट्रिंग में एम्बेड करने से बचें क्योंकि इसके साथ आसानी से छेड़छाड़ की जा सकती है। एक सुरक्षित एन्कोडिंग तंत्र का उपयोग करने पर विचार करें।
- नॉन्स को पुनः प्राप्त करें: अपने जावास्क्रिप्ट कोड में, नॉन्स मान को वहां से पुनः प्राप्त करें जहां इसे संग्रहीत किया गया था।
- नॉन्स एट्रिब्यूट सेट करें: स्क्रिप्ट तत्व को DOM में जोड़ने से पहले, इसके `nonce` एट्रिब्यूट को पुनः प्राप्त मान पर सेट करें।
उदाहरण:
सर्वर-साइड (जैसे, Python/Flask में Jinja2 का उपयोग करके):
```html <div id="csp-nonce" data-nonce="{{ nonce }}"></div> ```क्लाइंट-साइड जावास्क्रिप्ट:
```javascript function injectScript(url) { const nonceElement = document.getElementById('csp-nonce'); const nonce = nonceElement ? nonceElement.dataset.nonce : null; if (!nonce) { console.error('CSP nonce not found!'); return; } const script = document.createElement('script'); script.src = url; script.nonce = nonce; document.head.appendChild(script); } injectScript('https://example.com/script.js'); ```महत्वपूर्ण विचार:
- सुरक्षित भंडारण: इस बारे में सावधान रहें कि आप नॉन्स को कैसे उजागर करते हैं। इसे HTML स्रोत में जावास्क्रिप्ट स्ट्रिंग में सीधे एम्बेड करने से बचें क्योंकि यह कमजोर हो सकता है। किसी तत्व पर डेटा एट्रिब्यूट का उपयोग करना आम तौर पर एक सुरक्षित तरीका है।
- त्रुटि प्रबंधन: उन मामलों को शालीनता से संभालने के लिए त्रुटि प्रबंधन शामिल करें जहां नॉन्स उपलब्ध नहीं है (उदाहरण के लिए, एक गलत कॉन्फ़िगरेशन के कारण)। आप स्क्रिप्ट इंजेक्ट करना छोड़ सकते हैं या एक त्रुटि संदेश लॉग कर सकते हैं।
3. 'unsafe-inline' का उपयोग करना (हतोत्साहित)
हालांकि इष्टतम सुरक्षा के लिए अनुशंसित नहीं है, आपके `script-src` और `style-src` CSP डायरेक्टिव्स में `'unsafe-inline'` डायरेक्टिव का उपयोग करने से इनलाइन स्क्रिप्ट और स्टाइल को बिना नॉन्स के निष्पादित करने की अनुमति मिलती है। यह प्रभावी रूप से उस सुरक्षा को दरकिनार कर देता है जो नॉन्स प्रदान करते हैं और आपके CSP को काफी कमजोर करते हैं। इस दृष्टिकोण का उपयोग केवल अंतिम उपाय के रूप में और अत्यधिक सावधानी के साथ किया जाना चाहिए।
यह हतोत्साहित क्यों है:
सभी इनलाइन स्क्रिप्ट की अनुमति देकर, आप अपने एप्लिकेशन को XSS हमलों के लिए खोल देते हैं। एक हमलावर आपके पेज में दुर्भावनापूर्ण स्क्रिप्ट इंजेक्ट कर सकता है, और ब्राउज़र उन्हें निष्पादित करेगा क्योंकि CSP सभी इनलाइन स्क्रिप्ट की अनुमति देता है।
4. स्क्रिप्ट हैश
नॉन्स के बजाय, आप स्क्रिप्ट हैश का उपयोग कर सकते हैं। इसमें स्क्रिप्ट सामग्री के SHA-256, SHA-384, या SHA-512 हैश की गणना करना और इसे `script-src` डायरेक्टिव में शामिल करना शामिल है। ब्राउज़र केवल उन स्क्रिप्ट को निष्पादित करेगा जिनका हैश निर्दिष्ट मान से मेल खाता है।
उदाहरण:
यह मानते हुए कि `script.js` की सामग्री `console.log('Hello, world!');` है, और इसका SHA-256 हैश `sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=` है, CSP हेडर इस तरह दिखेगा:
Content-Security-Policy: default-src 'self'; script-src 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
फायदे:
- सटीक नियंत्रण: केवल मेल खाने वाले हैश वाली विशिष्ट स्क्रिप्ट को निष्पादित करने की अनुमति देता है।
- स्थिर स्क्रिप्ट के लिए उपयुक्त: अच्छी तरह से काम करता है जब स्क्रिप्ट सामग्री पहले से ज्ञात हो और अक्सर नहीं बदलती हो।
नुकसान:
- रखरखाव ओवरहेड: हर बार जब स्क्रिप्ट सामग्री बदलती है, तो आपको हैश की फिर से गणना करने और CSP हेडर को अपडेट करने की आवश्यकता होती है। यह डायनामिक स्क्रिप्ट या अक्सर अपडेट होने वाली स्क्रिप्ट के लिए बोझिल हो सकता है।
- डायनामिक स्क्रिप्ट के लिए मुश्किल: फ्लाई पर डायनामिक स्क्रिप्ट सामग्री को हैश करना जटिल हो सकता है और प्रदर्शन ओवरहेड पेश कर सकता है।
CSP नॉन्स जेनरेशन के लिए सर्वोत्तम प्रथाएं
- क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम नंबर जेनरेटर का उपयोग करें: सुनिश्चित करें कि आपकी नॉन्स जेनरेशन प्रक्रिया में क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम नंबर जेनरेटर का उपयोग किया जाता है ताकि हमलावरों को नॉन्स का अनुमान लगाने से रोका जा सके।
- प्रत्येक अनुरोध के लिए एक नया नॉन्स उत्पन्न करें: विभिन्न अनुरोधों में कभी भी नॉन्स का पुन: उपयोग न करें। प्रत्येक पेज लोड का एक अद्वितीय नॉन्स मान होना चाहिए।
- नॉन्स को सुरक्षित रूप से स्टोर और ट्रांसमिट करें: नॉन्स को इंटरसेप्ट या छेड़छाड़ से बचाएं। सर्वर और क्लाइंट के बीच संचार को एन्क्रिप्ट करने के लिए HTTPS का उपयोग करें।
- सर्वर पर नॉन्स को मान्य करें: (यदि लागू हो) उन परिदृश्यों में जहां आपको यह सत्यापित करने की आवश्यकता है कि एक स्क्रिप्ट निष्पादन आपके एप्लिकेशन से उत्पन्न हुआ है (जैसे, एनालिटिक्स या ट्रैकिंग के लिए), आप सर्वर-साइड पर नॉन्स को मान्य कर सकते हैं जब स्क्रिप्ट डेटा वापस भेजती है।
- नियमित रूप से अपनी CSP की समीक्षा और अपडेट करें: CSP एक "सेट एंड फॉरगेट" समाधान नहीं है। नए खतरों और अपने एप्लिकेशन में बदलावों को संबोधित करने के लिए नियमित रूप से अपनी CSP की समीक्षा और अपडेट करें। उल्लंघनों की निगरानी करने और संभावित सुरक्षा मुद्दों की पहचान करने के लिए CSP रिपोर्टिंग टूल का उपयोग करने पर विचार करें।
- CSP रिपोर्टिंग टूल का उपयोग करें: Report-URI या Sentry जैसे उपकरण आपको CSP उल्लंघनों की निगरानी करने और आपके CSP कॉन्फ़िगरेशन में संभावित मुद्दों की पहचान करने में मदद कर सकते हैं। ये उपकरण इस बारे में बहुमूल्य जानकारी प्रदान करते हैं कि कौन सी स्क्रिप्ट ब्लॉक की जा रही हैं और क्यों, जिससे आप अपनी CSP को परिष्कृत कर सकते हैं और अपने एप्लिकेशन की सुरक्षा में सुधार कर सकते हैं।
- एक रिपोर्ट-ओनली पॉलिसी से शुरू करें: CSP को लागू करने से पहले, एक रिपोर्ट-ओनली पॉलिसी से शुरू करें। यह आपको वास्तव में किसी भी संसाधन को ब्लॉक किए बिना पॉलिसी के प्रभाव की निगरानी करने की अनुमति देता है। फिर आप आत्मविश्वास हासिल करने के साथ-साथ धीरे-धीरे पॉलिसी को सख्त कर सकते हैं। `Content-Security-Policy-Report-Only` हेडर इस मोड को सक्षम करता है।
CSP कार्यान्वयन के लिए वैश्विक विचार
वैश्विक दर्शकों के लिए CSP लागू करते समय, निम्नलिखित पर विचार करें:
- अंतर्राष्ट्रीयकृत डोमेन नाम (IDNs): सुनिश्चित करें कि आपकी CSP नीतियां IDN को सही ढंग से संभालती हैं। ब्राउज़र IDN के साथ अलग-अलग व्यवहार कर सकते हैं, इसलिए अप्रत्याशित ब्लॉकिंग से बचने के लिए विभिन्न IDN के साथ अपनी CSP का परीक्षण करना महत्वपूर्ण है।
- कंटेंट डिलीवरी नेटवर्क (CDNs): यदि आप अपनी स्क्रिप्ट और स्टाइल परोसने के लिए CDN का उपयोग करते हैं, तो सुनिश्चित करें कि आप अपने `script-src` और `style-src` डायरेक्टिव्स में CDN डोमेन शामिल करें। वाइल्डकार्ड डोमेन (जैसे, `*.cdn.example.com`) का उपयोग करने से सावधान रहें क्योंकि वे सुरक्षा जोखिम पैदा कर सकते हैं।
- क्षेत्रीय नियम: किसी भी क्षेत्रीय नियमों से अवगत रहें जो आपके CSP कार्यान्वयन को प्रभावित कर सकते हैं। उदाहरण के लिए, कुछ देशों में डेटा स्थानीयकरण या गोपनीयता के लिए विशिष्ट आवश्यकताएं हो सकती हैं जो आपके CDN या अन्य तृतीय-पक्ष सेवाओं की पसंद को प्रभावित कर सकती हैं।
- अनुवाद और स्थानीयकरण: यदि आपका एप्लिकेशन कई भाषाओं का समर्थन करता है, तो सुनिश्चित करें कि आपकी CSP नीतियां सभी भाषाओं के साथ संगत हैं। उदाहरण के लिए, यदि आप स्थानीयकरण के लिए इनलाइन स्क्रिप्ट का उपयोग करते हैं, तो सुनिश्चित करें कि उनके पास सही नॉन्स है या वे आपकी CSP में व्हाइटलिस्टेड हैं।
उदाहरण परिदृश्य: एक बहु-भाषी ई-कॉमर्स वेबसाइट
एक बहु-भाषी ई-कॉमर्स वेबसाइट पर विचार करें जो ए/बी टेस्टिंग, उपयोगकर्ता ट्रैकिंग और वैयक्तिकरण के लिए जावास्क्रिप्ट कोड को गतिशील रूप से इंजेक्ट करती है।
चुनौतियां:
- डायनामिक स्क्रिप्ट इंजेक्शन: ए/बी टेस्टिंग फ्रेमवर्क अक्सर प्रयोग विविधताओं को नियंत्रित करने के लिए गतिशील रूप से स्क्रिप्ट इंजेक्ट करते हैं।
- तृतीय-पक्ष स्क्रिप्ट: उपयोगकर्ता ट्रैकिंग और वैयक्तिकरण विभिन्न डोमेन पर होस्ट की गई तृतीय-पक्ष स्क्रिप्ट पर निर्भर हो सकता है।
- भाषा-विशिष्ट तर्क: कुछ भाषा-विशिष्ट तर्क इनलाइन स्क्रिप्ट का उपयोग करके कार्यान्वित किए जा सकते हैं।
समाधान:
- नॉन्स-आधारित CSP लागू करें: XSS हमलों के खिलाफ प्राथमिक रक्षा के रूप में नॉन्स-आधारित CSP का उपयोग करें।
- ए/बी टेस्टिंग स्क्रिप्ट के लिए प्रोग्रामेटिक नॉन्स इंजेक्शन: गतिशील रूप से बनाए गए ए/बी टेस्टिंग स्क्रिप्ट तत्वों में नॉन्स को इंजेक्ट करने के लिए ऊपर वर्णित प्रोग्रामेटिक नॉन्स इंजेक्शन तकनीक का उपयोग करें।
- विशिष्ट तृतीय-पक्ष डोमेन को व्हाइटलिस्ट करना: `script-src` डायरेक्टिव में विश्वसनीय तृतीय-पक्ष स्क्रिप्ट के डोमेन को सावधानीपूर्वक व्हाइटलिस्ट करें। वाइल्डकार्ड डोमेन का उपयोग करने से बचें जब तक कि बिल्कुल आवश्यक न हो।
- भाषा-विशिष्ट तर्क के लिए इनलाइन स्क्रिप्ट को हैश करना: यदि संभव हो, तो भाषा-विशिष्ट तर्क को अलग-अलग जावास्क्रिप्ट फ़ाइलों में ले जाएं और उन्हें व्हाइटलिस्ट करने के लिए स्क्रिप्ट हैश का उपयोग करें। यदि इनलाइन स्क्रिप्ट अपरिहार्य हैं, तो उन्हें व्यक्तिगत रूप से व्हाइटलिस्ट करने के लिए स्क्रिप्ट हैश का उपयोग करें।
- CSP रिपोर्टिंग: उल्लंघनों की निगरानी करने और स्क्रिप्ट के किसी भी अप्रत्याशित अवरोधन की पहचान करने के लिए CSP रिपोर्टिंग लागू करें।
निष्कर्ष
CSP नॉन्स के साथ डायनामिक रूप से इंजेक्ट की गई स्क्रिप्ट को सुरक्षित करने के लिए एक सावधानीपूर्वक और सुनियोजित दृष्टिकोण की आवश्यकता होती है। हालांकि यह केवल डोमेन को व्हाइटलिस्ट करने से अधिक जटिल हो सकता है, यह आपके एप्लिकेशन की सुरक्षा स्थिति में एक महत्वपूर्ण सुधार प्रदान करता है। इस लेख में उल्लिखित चुनौतियों को समझकर और समाधानों को लागू करके, आप अपने फ्रंटएंड को XSS हमलों से प्रभावी ढंग से बचा सकते हैं और अपने उपयोगकर्ताओं के लिए दुनिया भर में एक अधिक सुरक्षित वेब एप्लिकेशन बना सकते हैं। सुरक्षा सर्वोत्तम प्रथाओं को हमेशा प्राथमिकता देना याद रखें और उभरते खतरों से आगे रहने के लिए नियमित रूप से अपनी CSP की समीक्षा और अपडेट करें।
इस गाइड में उल्लिखित सिद्धांतों और तकनीकों का पालन करके, आप एक मजबूत और प्रभावी CSP बना सकते हैं जो आपकी वेबसाइट को XSS हमलों से बचाता है, जबकि आपको अभी भी गतिशील रूप से इंजेक्ट की गई स्क्रिप्ट का उपयोग करने की अनुमति देता है। अपनी CSP का अच्छी तरह से परीक्षण करना याद रखें और यह सुनिश्चित करने के लिए नियमित रूप से इसकी निगरानी करें कि यह अपेक्षा के अनुरूप काम कर रहा है और यह किसी भी वैध संसाधन को अवरुद्ध नहीं कर रहा है।