सुरक्षा और सीएसपी नीतियां
1) हमें सुरक्षा नीतियों की आवश्यकता क्यों है
आधुनिक फ्रंटेंड और एपीआई कई स्रोतों (सीडीएन, एनालिटिक्स, पीएसपी, 3 डीएस, चैट) पर निर्भर करता है। कठिन नीतियों के बिना, XSS के जोखिम, क्लिकजैकिंग, डेटा लीक और सत्र अपहरण में वृद्धि होती है। सुरक्षा नीतियां अनुमति-सूची मॉडल में ब्राउज़र को स्थानांतरित करके डिफ़ॉल्ट रूप से अनुमत क्या सीमित कर
2) बुनियादी स्तंभ
CSP (सामग्री सुरक्षा नीति) अनुमत JS/CSS/मीडिया स्रोतों और व्यवहारों का एक केंद्रीकृत "मेनू" है।
विश्वसनीय प्रकार - DOM-XSS के खिलाफ टाइप-लेवल सुरक्षा।
श्री (सबरेसर्स इंटीग्रिटी) - लिपियों/शैलियों की अखंडता को नियंत्रित करें।
COP/COEP/CORP - स्रोतों के बीच संदर्भों और संसाधनों का कठोर अलगाव।
मेटाडेटा लाना ('Sec-Fetch-') क्रॉस-साइट अनुरोधों को फ़िल्टर करने के लिए एक सर्वर समाधान है।
CORS - क्रॉस-डोमेन API एक्सेस पॉलिसी।
क्लासिक शीर्षक: एचएसटीएस, 'एक्स-फ्रेम-ऑप्शंस '/' फ्रेम-पूर्वजों', 'रेफरर-पॉलिसी', 'अनुमति-नीति', सेमसाइट-कुकीज़।
3) सीएसपी: आधार और सिद्धांत
3. 1 निर्देश (कुंजी)
'default-src' - अन्य निर्देशों के लिए डिफ़ॉल्ट।
'स्क्रिप्ट-एसआरसी' - जेएस स्रोत, नॉन/हैश, 'सख्त-गतिशील', 'रिपोर्ट-नमूना'।
'स्टाइल-एसआरसी' - सीएसएस स्रोत; 'अनसेफ-इनलाइन' को कम करें।
'img-src', 'font-src', 'media-src', 'object-src' (обычно 'now')।
'कनेक्ट-src' - नेटवर्क अनुरोध (XHR/feetch/WebSocket)।
'frame-src '/' चाइल्ड-src' - थर्ड-पार्टी फ्रेम (PSP, 3DS)।
'फ्रेम-पूर्वजों' - जो हमारी साइट (एंटी-क्लिकजैकिंग) को एम्बेड कर सकते हैं।
'बेस-यूरी' - '
'फॉर्म-एक्शन' - जहां फॉर्म जमा करने की अनुमति है।
'अपग्रेड-असुरक्षित-अनुरोध', 'ब्लॉक-ऑल-मिश्रित-सामग्री' - HTTP/HTTPS मिश्रण से लड़ ना।
'रिपोर्ट-यूरी '/' रिपोर्ट-टू' - उल्लंघन कहां भेजना है।
3. 2 नॉन - हैश
नॉन दृष्टिकोण: प्रत्येक HTTP प्रतिक्रिया के लिए एक क्रिप्टो-रैंडम 'नॉनस' उत्पन्न करें, इनलाइन स्क्रिप्ट और 'स्क्रिप्ट-src' नॉन- "..
हैश दृष्टिकोण: इनलाइन सामग्री का निश्चित हैश। स्थैतिक एचटीएमएल के लिए उपयुक्त, गतिशीलता के लिए असुविधाजनक।
'स्ट्रिक्ट-डायनामिक': केवल "विश्वसनीय" स्क्रिप्ट (नॉन/हैश के साथ) द्वारा लोड की गई स्क्रिप्ट पर भरोसा करें। गतिशील बूट के दौरान लक्ष्य डोमेन को सूचीबद्ध करने की आवश्यकता को हटाता है, लेकिन आधुनिक ब्राउज़र की आवश्यक
3. 3 'बिना शर्त' पर प्रतिबंध लगाना
'असुरक्षित-इनलाइन', 'असुरक्षित-अस्पष्ट' से बचें। यदि फ्रेमवर्क के लिए eval की आवश्यकता होती है (उदाहरण के लिए, source-mape in dev), सिर्फ dev पर शामिल करें
शैलियों के लिए - बिना इनलाइन के यदि संभव हो तो 'नॉन' या 'हैश' का उपयोग करें।
3. 4 सख्त सीएसपी का उदाहरण (युद्ध बिंदु)
Content-Security-Policy:
default-src 'none';
base-uri 'self';
object-src 'none';
script-src 'self' 'nonce-{RANDOM}' 'strict-dynamic' https://www. googletagmanager. com;
style-src 'self' 'nonce-{RANDOM}';
img-src 'self' data: https://images. example-cdn. com;
font-src 'self' https://fonts. gstatic. com;
connect-src 'self' https://api. example. com wss://ws. example. com;
frame-src https://3ds. psp. com https://pay. psp. com;
frame-ancestors 'none';
form-action 'self' https://pay. psp. com;
upgrade-insecure-requests;
report-to csp-endpoint; report-sample
4) विश्वसनीय प्रकार (DOM-XSS)
निर्देश सक्षम करें: 'सामग्री-सुरक्षा-नीति:' script 'के लिए आवश्यक-विश्वसनीय-प्रकार; भरोसेमंद-प्रकार ऐप डिफ़ॉल्ट '।
कोड में एकल नीति बनाएँ ('विंडो। Trustertypes। क्रीट पॉलिसी ('एप्लिकेशन', {CreateHTML () {...}) ')।
असुरक्षित असाइनमेंट ('तत्व। InnerHTML =... ') без विश्वसनीय प्रकार।
फ्रेमवर्क एकीकरण (रिएक्ट/कोणीय/Vue): सुरक्षित रेंडरिंग API का उपयोग करें, खतरनाक खतरे से बचें SetInnerHTML।
5) श्री (सीडीएन अखंडता)
बाहरी' <स्क्रिप्ट> '/' ' के लिए, 'इंटीग्रिटी =" sha256- का उपयोग करें... "क्रॉसोरिगिन =" अनाम"।
श्री पूरक, प्रतिस्थापन नहीं, सीएसपी। सीडीएन संस्करण अपग्रेड करते समय हैश अपडेट करें।
6) क्लिकजैकिंग और फ्रेम
आधुनिक तरीका 'फ्रेम-पूर्वजों' है (पुराने 'एक्स-फ्रेम-विकल्प' की जगह लेता है)।