nonce
विशेषता को "श्वेत सूची" कुछ इनलाइन लिए सक्षम बनाता है script
और style
जबकि सीएसपी का उपयोग न करें, तत्व unsafe-inline
(जो की अनुमति होगी निर्देश सभी इनलाइन script
/ style
,) ताकि आप अभी भी इनलाइन अनुमति न देने की कुंजी सीएसपी सुविधा को बनाए रखने script
/ style
सामान्य रूप में।
इसलिए nonce
विशेषता ब्राउज़रों को यह बताने का तरीका है कि किसी विशेष स्क्रिप्ट या शैली तत्व की इनलाइन सामग्री को कुछ (दुर्भावनापूर्ण) तृतीय पक्ष द्वारा दस्तावेज़ में अंतःक्षिप्त नहीं किया गया था, लेकिन इसके बजाय जानबूझकर दस्तावेज़ में डाल दिया गया था जो कोई भी उस दस्तावेज़ को नियंत्रित करता है जिसे दस्तावेज़ सेवा प्रदान करता है से।
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it इस nonce
विशेषता का उपयोग करने का एक अच्छा उदाहरण देता है , जिसमें निम्न चरणों का पालन होता है:
आपके अनुरोध के लिए आपका वेब सर्वर किसी विशेष दस्तावेज़ के लिए प्राप्त करता है, तो अपने बैकएंड को क्रिप्टोग्राफिक रूप से सुरक्षित रैंडम नंबर जनरेटर से कम से कम 128 बिट डेटा का एक यादृच्छिक बेस 64-एन्कोडेड स्ट्रिंग उत्पन्न करें; जैसे, EDNnf03nceIOfn39fn3e9h3sdfa
। वह तुम्हारा गैर है।
चरण 1 में उत्पन्न गैर-ले लो, और किसी भी इनलाइन के लिए script
/ style
आप "श्वेतसूची" करना चाहते हैं, अपने बैकएंड कोड nonce
को दस्तावेज़ में एक विशेषता डालें , इससे पहले कि तार पर भेजा जाए, मान के रूप में उस गैर के साथ:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
चरण 1 में उत्पन्न अस्थायी रूप से, आगे जोड़ते ले लो nonce-
इसे करने के लिए, और अपने बैकएंड के लिए स्रोत सूची के मूल्यों के बीच उस के साथ एक सीएसपी हैडर उत्पन्न करना script-src
या style-src
:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
तो एक गैर का उपयोग करने का तंत्र आपके बैकएंड को इनलाइन की सामग्री का एक हैश उत्पन्न करने के बजाय एक विकल्प है script
या style
आप अनुमति देना चाहते हैं, और फिर उस हैश को अपने सीएसपी हेडर में उपयुक्त स्रोत सूची में निर्दिष्ट करें।
ध्यान दें कि क्योंकि ब्राउजर ऐसा नहीं करते (चेक कर सकते हैं) कि नॉन वैल्यू ने पेज रिक्वेस्ट के बीच बदलाव भेजा है, यह संभव है — हालाँकि पूरी तरह से अनजाने में — 1 से ऊपर छोड़ने के लिए और न ही आपके बैकेंड ने नॉन के लिए गतिशील रूप से कुछ भी किया हो, जिस स्थिति में आप बस nonce
अपने doc के HTML स्रोत में एक स्थिर मूल्य के साथ एक विशेषता डाल सकता है , और उसी गैर मूल्य के साथ एक स्थिर CSP शीर्ष लेख भेजें।
लेकिन इसका कारण यह है कि आप इस तरह से एक स्टैटिक नॉनस का उपयोग नहीं करना चाहते हैं, यह बहुत ज्यादा है कि नॉन का उपयोग करने के पूरे उद्देश्य को हराना शुरू कर दें - क्योंकि, अगर आप स्टैटिक नॉनस का उपयोग करना चाहते हैं, तो उस बिंदु पर आप बस का उपयोग कर सकते हैं unsafe-inline
।