सामग्री-सुरक्षा नीतियों (सीएसपी) के साथ स्प्रिंग बूट में क्रॉस-साइट स्क्रिप्टिंग (एक्सएसएस) को रोकें

परिचय

वेब एप्लिकेशन का उपयोग करते समय उपयोगकर्ताओं और उनके व्यक्तिगत डेटा की सुरक्षा सर्वोपरि है। हालांकि इस मार्गदर्शक सिद्धांत को वेब विकास के शुरुआती चरणों से भी स्वीकार किया गया है - बुरे अभिनेता अनुप्रयोगों में खामियां ढूंढते हैं, और आपके उपयोगकर्ताओं का शोषण कर सकते हैं।

कई "मानक" हमले प्रसिद्ध और प्रलेखित हैं, और उनसे सुरक्षा कठिन नहीं है। डेवलपर को स्वयं सुरक्षा प्रथाओं को लागू करने से रोकने के लिए, स्प्रिंग बूट जैसे ढांचे ने विभिन्न सुरक्षा उपायों को दूर कर दिया है और आपको जाने-माने हमलों को रोकने के लिए अपने अनुप्रयोगों में सुरक्षा फ़िल्टर लागू करने की अनुमति देता है।

इस संक्षिप्त मार्गदर्शिका में, हम इस बात पर एक नज़र डालेंगे कि क्रॉस-साइट स्क्रिप्टिंग (XSS) क्या है, कोई व्यक्ति आपके स्वयं के एप्लिकेशन पर इस हमले को कैसे कर सकता है, और आप इसे स्प्रिंग बूट के साथ आसानी से कैसे रोक सकते हैं।

क्रॉस-साइट स्क्रिप्टिंग (XSS) क्या है?

क्रॉस-साइट स्क्रिप्टिंग एक प्रसिद्ध, व्यापक रूप से फैला हुआ शोषण है, जिसमें एक बुरा अभिनेता एक वेब एप्लिकेशन में एक स्क्रिप्ट को इंजेक्ट करता है।

आम तौर पर, एक समान मूल नीति वेब अनुप्रयोगों पर लागू होती है, जो वेब पेज में स्क्रिप्ट को स्रोतों से डेटा तक पहुंचने के लिए प्रतिबंधित करती है यदि उनकी उत्पत्ति मेल नहीं खाती है। समान मूल नीति के अंतर्गत - यदि a . से कोई पृष्ठ विश्वसनीय वेबसाइट उपयोगकर्ता के साथ डेटा इंटरफेसिंग (जैसे कुकीज़, उदाहरण के लिए) तक पहुंच सकता है, उसी मूल के अन्य पेज भी ऐसा कर सकते हैं। उस समय वेब अनुप्रयोगों पर डेटा की अखंडता की रक्षा के लिए एक्सेस-कंट्रोल का यह रूप पर्याप्त लग रहा था।

क्रॉस-साइट स्क्रिप्टिंग समान-मूल नीति को दरकिनार करती है, एक विश्वसनीय वेबसाइट के पृष्ठ में एक दुर्भावनापूर्ण स्क्रिप्ट को इंजेक्ट करके। चूंकि स्क्रिप्ट एक विश्वसनीय वेबसाइट से चलाई जाती है, इसलिए इसे एक विश्वसनीय स्क्रिप्ट के रूप में निष्पादित किया जाता है। दुर्भावनापूर्ण स्क्रिप्ट और गैर-दुर्भावनापूर्ण स्क्रिप्ट के बीच अंतर करने का कोई स्पष्ट तरीका नहीं था - इसलिए क्रॉस-साइट स्क्रिप्टिंग के साथ मनमाने ढंग से कोड निष्पादन संभव था। यह कष्टप्रद अलर्ट डालने से लेकर सोशल इंजीनियरिंग हमलों तक, चुपचाप उपयोगकर्ता जानकारी एकत्र करने, या उपयोगकर्ताओं को फ़िशिंग पृष्ठों पर पुनर्निर्देशित करने तक, जो विश्वसनीय वेबसाइटों के हिस्से प्रतीत होते हैं।

बहुत वेबसाइटें क्रॉस-साइट स्क्रिप्टिंग हमलों के लिए अतिसंवेदनशील हैं, और यह आज भी एक आम हमला बना हुआ है, भले ही इस प्रकार के शोषण को 90 के दशक से जाना जाता है।

सामग्री-सुरक्षा नीति (सीएसपी) के साथ स्प्रिंग बूट एप्लिकेशन में एक्सएसएस को रोकना

स्प्रिंग बूट सुरक्षा को गंभीरता से लेता है, और स्प्रिंग का सुरक्षा मॉड्यूल लचीली और शक्तिशाली सुरक्षा प्रथाओं को लागू करता है जो डेवलपर्स को सुरक्षा के मामले में उनकी चिंता को कम करने की अनुमति देता है, जिसके लिए अक्सर वेब में संदेशों के आदान-प्रदान के सिद्धांतों की निम्न-स्तरीय समझ की आवश्यकता होती है। आवेदन पत्र।

डिफ़ॉल्ट रूप से, स्प्रिंग बूट कई सुरक्षा हेडर लागू करता है:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

X-XSS-सुरक्षा डिफ़ॉल्ट रूप से शामिल है! यह सुरक्षा शीर्षलेख करने का प्रयास करता है पता लगाना XSS प्रयास करता है, और उन्हें ब्लॉक कर देता है। हालांकि यह एक असफल-सबूत प्रक्रिया नहीं है, और ब्राउज़र में डिटेक्टरों के विभिन्न कार्यान्वयन होते हैं। कुछ ब्राउज़र, जैसे क्रोम, में सम है अपने XSS लेखा परीक्षक को हटा दिया. इसके अतिरिक्त, स्वचालित पहचान इसके लिए काम करती है प्रतिबिंबित XSS हमले, जबकि अन्य प्रकार के हमले भी मौजूद हैं।

एक्स-एक्सएसएस-प्रोटेक्शन का एक और आधुनिक विकल्प है सामग्री-सुरक्षा नीति (सीएसपी), जो मुख्य रूप से उन नीतियों से संबंधित है जिन पर संसाधनों को लोड किया जा सकता है, किस मूल से, और किस समापन बिंदु पर। 2022 तक, सीएसपी एक्सएसएस, क्लिकजैकिंग और अन्य प्रकार के हमलों के खिलाफ सबसे अच्छा रोकथाम उपाय है। सभी ब्राउज़र सीएसपी को लागू नहीं करते हैं, यही वजह है कि इसे डिफ़ॉल्ट रूप से सुरक्षा हेडर में शामिल नहीं किया जाता है।

नोट: यहां तक ​​​​कि सीएसपी के साथ, यह हमेशा मान्य करने के लिए कार्रवाई का सबसे अच्छा तरीका है कोई उपयोगकर्ता इनपुट और सुनिश्चित करें कि कोड इंजेक्शन को रोकने के लिए, आपके सिस्टम का उपयोग करके संसाधित करना सुरक्षित है।

स्प्रिंग बूट में - कस्टम वेब सुरक्षा उपायों को कॉन्फ़िगर करने के लिए, आप आमतौर पर इसका विस्तार करेंगे WebSecurityConfigurerAdapter कक्षा, और ओवरराइड करें configure() तरीका:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

जहां सामग्री सुरक्षा नीति निर्देश (एक के रूप में आपूर्ति की जाती है) ;-सेपरेटेड स्ट्रिंग) आपके उपयोग-मामले पर निर्भर करती है और आप किन स्रोतों पर भरोसा करना चाहते हैं:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

उदाहरण के लिए, एक वेब एप्लिकेशन विश्वसनीय वेबसाइटों को सूचीबद्ध कर सकता है जिनसे स्क्रिप्ट लोड की जा सकती हैं:

script-src https://trusted.com;

या आप किसी तीसरे पक्ष की वेबसाइट पर भरोसा करना छोड़ सकते हैं:

script-src self;

इसी तरह, एक एप्लिकेशन प्लगइन्स पर भरोसा कर सकता है:

object-src https://trusted.com

आपके द्वारा आपूर्ति किए जा सकने वाले निर्देशों की एक विस्तृत विविधता है, जिनमें शामिल हैं:

  • default-src - डिफ़ॉल्ट फ़ॉलबैक
  • child-src - वैध वेब कार्यकर्ता स्रोत
  • frame-src - के लिए वैध स्रोत s और s
  • img-src - छवियों के लिए मान्य स्रोत
  • media-src - के लिए वैध स्रोत , और टैग
  • script-src - मान्य स्क्रिप्ट स्रोत (XSS को रोकने में मदद करता है)
  • style-src - के लिए वैध स्रोत तत्व
  • base-uri - से सुलभ संसाधनों को प्रतिबंधित करता है तत्व
  • frame-ancestors - के वैध माता-पिता , , , आदि तत्व
  • इत्यादि

सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!

उदाहरण के लिए, यहां नीति निर्देशों का एक सुरक्षित सेट दिया गया है:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

आइए इन्हें हमारे स्प्रिंग बूट एप्लिकेशन में जोड़ें:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

आप का उपयोग कर सकते हैं सीएसपी-मूल्यांकनकर्ता मूल्यांकन करने के लिए कि क्या आपके सीएसपी निर्देश मान्य हैं और सुरक्षित है, और यह इंगित करेगा कि कौन से निर्देश आसानी से उपयोग किए जा सकते हैं। यहां एक CSP-निर्देश दिया गया है जो Google API के लिए अनुमति देता है:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

निष्कर्ष

इस संक्षिप्त मार्गदर्शिका में, हमने देखा है कि क्रॉस-साइट स्क्रिप्टिंग (XSS) क्या है, और यह समग्र स्तर पर कैसे काम करती है। फिर, हमने कुछ एक्सएसएस रोकथाम उपायों की खोज की है जो आपके अनुप्रयोगों को सुरक्षित बनाने के लिए स्प्रिंग बूट के साथ आसानी से कार्यान्वित किए जा सकते हैं, और एक सेट करें सामग्री-सुरक्षा नीति (CSP)।

अंत में, हमने सीएसपी निर्देशों की खोज की है और कुछ अलग-अलग सुरक्षित नीतियों पर एक नज़र डाली है।

समय टिकट:

से अधिक स्टैकब्यूज