جلوگیری از اسکریپت بین سایتی (XSS) در Spring Boot با خط‌مشی‌های امنیت محتوا (CSP)

معرفی

امنیت کاربران و اطلاعات شخصی آنها در هنگام استفاده از یک برنامه وب بسیار مهم است. در حالی که این اصل راهنما حتی از مراحل اولیه توسعه وب تأیید شده است - بازیگران بد حفره هایی در برنامه ها پیدا می کنند و ممکن است از کاربران شما سوء استفاده کنند.

بسیاری از حملات "استاندارد" به خوبی شناخته شده و مستند هستند، و محافظت در برابر آنها سخت نیست. برای اینکه برنامه‌نویس را از اجرای شیوه‌های امنیتی خود رها کند، فریم‌ورک‌هایی مانند Spring Boot تدابیر امنیتی مختلف را حذف کرده‌اند و به شما این امکان را می‌دهند که به سادگی فیلترهای امنیتی را در برنامه‌های خود اعمال کنید تا از حملات معروف جلوگیری کنید.

در این راهنمای کوتاه، نگاهی خواهیم داشت به اینکه Cross-Site Scripting (XSS) چیست، چگونه شخصی می تواند این حمله را روی برنامه شخصی شما انجام دهد، و چگونه می توانید با Spring Boot به راحتی از آن جلوگیری کنید.

اسکریپت بین سایتی (XSS) چیست؟

Cross-Site Scripting یک سوء استفاده شناخته شده و گسترده است که در آن یک بازیگر بد یک اسکریپت را به یک برنامه وب تزریق می کند.

به طور معمول، یک خط‌مشی با مبدأ یکسان برای برنامه‌های کاربردی وب اعمال می‌شود که اسکریپت‌ها را در یک صفحه وب برای دسترسی به داده‌ها از منابع در صورت عدم تطابق منشأ آنها محدود می‌کند. تحت خط مشی مبدأ یکسان - اگر صفحه ای از a وب سایت قابل اعتماد ممکن است به رابط داده با کاربر (مانند کوکی ها، برای مثال) دسترسی داشته باشد، صفحات دیگر از همان مبدا نیز ممکن است این کار را انجام دهند. این شکل از کنترل دسترسی برای محافظت از یکپارچگی داده ها در برنامه های کاربردی وب در آن زمان کافی به نظر می رسید.

اسکریپت بین سایتی خط مشی مبدأ یکسان را دور می زند، با تزریق یک اسکریپت مخرب به صفحه یک وب سایت قابل اعتماد. از آنجایی که اسکریپت از یک وب سایت قابل اعتماد اجرا می شود، به عنوان یک اسکریپت قابل اعتماد اجرا می شود. هیچ راه روشنی برای تمایز بین اسکریپت های مخرب و اسکریپت های غیر مخرب وجود نداشت - بنابراین اجرای کد دلخواه با اسکریپت بین سایتی امکان پذیر بود. این موارد از درج هشدارهای مزاحم، حملات مهندسی اجتماعی، جمع‌آوری بی‌صدا اطلاعات کاربر، یا هدایت مجدد کاربران به صفحات فیشینگ که به نظر می‌رسد بخشی از وب‌سایت‌های مورد اعتماد هستند، متغیر است.

بسیاری وب‌سایت‌ها مستعد حملات Cross-Site Scripting هستند و امروزه همچنان یک حمله رایج باقی مانده است، حتی اگر این نوع سوءاستفاده از دهه 90 شناخته شده است.

جلوگیری از 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 تلاش می کند و آنها را مسدود می کند. با این حال، این یک فرآیند ضد شکست نیست، و مرورگرها پیاده سازی های مختلفی از آشکارسازها دارند. برخی از مرورگرها، مانند کروم، حتی دارند حسابرس XSS خود را حذف کرد. علاوه بر این، تشخیص خودکار برای بازتاب حملات 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 را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google 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-Evaluator برای ارزیابی اینکه آیا دستورالعمل های CSP شما معتبر هستند یا خیر و امن است، و اشاره می کند که کدام دستورالعمل ها به راحتی قابل بهره برداری هستند. در اینجا یک دستورالعمل CSP وجود دارد که به API های Google اجازه می دهد:

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'

نتیجه

در این راهنمای کوتاه، نگاهی انداخته‌ایم به اینکه Cross-Site Scripting (XSS) چیست و چگونه در سطح کلی کار می‌کند. سپس، ما برخی از اقدامات پیشگیری از XSS را بررسی کرده‌ایم که می‌توانند به راحتی با Spring Boot پیاده‌سازی شوند تا برنامه‌های شما ایمن شوند، و یک خط مشی امنیت محتوا (CSP).

در نهایت، دستورالعمل‌های CSP را بررسی کرده‌ایم و به چند خط‌مشی مختلف امن نگاهی انداخته‌ایم.

تمبر زمان:

بیشتر از Stackabuse