منع البرمجة النصية عبر المواقع (XSS) في Spring Boot باستخدام سياسات أمان المحتوى (CSPs)

المُقدّمة

يعد أمان المستخدمين وبياناتهم الشخصية أثناء استخدام تطبيق الويب أمرًا بالغ الأهمية. في حين تم الاعتراف بهذا المبدأ التوجيهي حتى منذ المراحل الأولى لتطوير الويب - يجد الفاعلون السيئون ثغرات في التطبيقات ، وقد يستغلون المستخدمين لديك.

العديد من الهجمات "القياسية" معروفة وموثقة جيدًا ، والحماية منها ليست صعبة. لإلغاء عبء المطور عن تنفيذ ممارسات الأمان بنفسه ، قامت أطر عمل مثل Spring Boot بإلغاء إجراءات الأمان المختلفة والسماح لك ببساطة بتطبيق عوامل تصفية الأمان في تطبيقاتك لمنع الهجمات المعروفة.

في هذا الدليل المختصر ، سنلقي نظرة على ماهية البرمجة النصية عبر المواقع (XSS) ، وكيف يمكن لشخص ما تنفيذ هذا الهجوم على التطبيق الخاص بك ، وكيف يمكنك منعه بسهولة باستخدام Spring Boot.

ما هي البرمجة النصية عبر المواقع (XSS)؟

تعد البرمجة النصية عبر المواقع أحد الثغرات المعروفة والمنتشرة على نطاق واسع ، حيث يقوم الفاعل السيئ بحقن نص برمجي في تطبيق ويب.

عادةً ما يتم تطبيق سياسة نفس الأصل على تطبيقات الويب ، مما يقيد البرامج النصية في صفحة الويب للوصول إلى البيانات من المصادر إذا كانت أصولها غير متطابقة. بموجب سياسة المصدر نفسه - إذا كانت الصفحة من ملف موقع موثوق به قد تصل إلى البيانات التي تتفاعل مع المستخدم (مثل ملفات تعريف الارتباط ، على سبيل المثال) ، وقد تفعل ذلك صفحات أخرى من نفس المصدر أيضًا. بدا هذا الشكل من أشكال التحكم في الوصول كافياً لحماية سلامة البيانات على تطبيقات الويب في ذلك الوقت.

تتحايل البرمجة النصية عبر المواقع على سياسة المصدر نفسه، عن طريق إدخال برنامج نصي ضار في صفحة موقع ويب موثوق به. نظرًا لأنه يتم تشغيل البرنامج النصي من موقع ويب موثوق به ، يتم تنفيذه كبرنامج نصي موثوق به. لم تكن هناك طريقة واضحة للتمييز بين البرامج النصية الخبيثة والنصوص غير الضارة - لذلك كان تنفيذ التعليمات البرمجية العشوائي ممكنًا باستخدام البرمجة النصية عبر المواقع. يتراوح هذا في أي مكان من إدخال التنبيهات المزعجة إلى هجمات الهندسة الاجتماعية أو جمع معلومات المستخدم بصمت أو إعادة توجيه المستخدمين إلى صفحات التصيد الاحتيالي التي تبدو أنها أجزاء من مواقع الويب الموثوقة.

كثير مواقع الويب عرضة لهجمات البرمجة النصية عبر المواقع ، ولا تزال هجومًا شائعًا اليوم ، على الرغم من أن هذا النوع من الاستغلال معروف منذ التسعينيات.

منع XSS في تطبيق Spring Boot باستخدام سياسة أمان المحتوى (CSP)

يأخذ Spring Boot الأمان على محمل الجد ، وتنفذ وحدة Spring's Security ممارسات أمان مرنة وقوية تسمح للمطورين بتقليل قلقهم عندما يتعلق الأمر بالأمان ، الأمر الذي يتطلب في كثير من الأحيان فهمًا منخفض المستوى لمبادئ الطريقة التي يتم بها تبادل الرسائل على الويب طلب.

حسب الأصول ، ينفذ Spring Boot العديد من رؤوس الأمان:

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-Protection افتراضيًا! يحاول رأس الأمان هذا بكشف أو XSS يحاول ويمنعهم. ومع ذلك ، فهذه ليست عملية مقاومة للفشل ، وللمتصفحات تطبيقات مختلفة لأجهزة الكشف. بعض المتصفحات ، مثل Chrome ، لديها حتى إزالة XSS Auditor. بالإضافة إلى ذلك ، يعمل الكشف الآلي لـ هجمات XSS المنعكسة، بينما توجد أنواع أخرى من الهجمات أيضًا.

البديل الأكثر حداثة لـ X-XSS-Protection هو سياسة أمان المحتوى (CSP) ، والتي تتعامل بشكل أساسي مع السياسات التي يمكن تحميل الموارد عليها ، ومن أي أصول ، وفي أي نقاط نهاية. اعتبارًا من عام 2022 ، يعد CSP هو أفضل إجراء وقائي ضد XSS و Clickjacking وأنواع الهجمات الأخرى. لا تطبق جميع المتصفحات CSP ، وهذا هو سبب عدم تضمينها في رؤوس الأمان افتراضيًا.

ملحوظة: حتى مع وجود CSP في مكانه ، فمن الأفضل دائمًا التحقق من صحته أي وقت إدخال المستخدم وتأكد من أنه آمن للمعالجة باستخدام نظامك ، لمنع إدخال الكود.

في Spring Boot - لتكوين إجراءات أمان الويب المخصصة ، ستقوم عادةً بتوسيع نطاق 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
  • 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;

دعنا نضيف هذه إلى تطبيق Spring Boot الخاص بنا:

@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 لتقييم ما إذا كانت توجيهات CSP الخاصة بك صالحة و آمن ، وسيوضح التوجيهات التي يمكن استغلالها بسهولة. إليك توجيه CSP الذي يسمح لـ Google APIs:

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) ، وكيف تعمل على مستوى مرح. بعد ذلك ، استكشفنا بعض إجراءات الوقاية من XSS التي يمكن تنفيذها بسهولة باستخدام Spring Boot لجعل تطبيقاتك آمنة ، وقمنا بتعيين ملف سياسة أمان المحتوى (CSP).

أخيرًا ، استكشفنا توجيهات CSP وألقينا نظرة على اثنين من السياسات الآمنة المختلفة.

الطابع الزمني:

اكثر من ستاكابوز