آشنایی با HTTP و سیاست امنیتی محتوا (CSP)

introduction to http and content security policy
20 آبان 1403

بحث سیاست امنیتی محتوا (Content Security Policy) یا همان CSP یکی از موضوعات مهم و حیاتی در دنیای وب امروز است. به زبان ساده، CSP برای تأمین امنیت بهتر صفحات وب با محدود کردن منابعی که مرورگر می‌تواند بارگذاری کند، طراحی شده است.

فرض کنید وب‌سایتی دارید و قصد دارید تا مطمئن شوید کاربران تنها از منابعی که شما وجه کرده‌اید استفاده کنند. CSP به شما این امکان را می‌دهد تا فقط برخی از دامنه‌ها و منابعی که به آن‌ها اعتماد دارید، تعریف کنید. بدین ترتیب، امنیت و اعتماد به صفحات شما افزایش پیدا خواهد کرد.

کاربرد اصلی CSP جلوگیری از حملات تزریق اسکریپت، مانند Cross-Site Scripting (XSS)، است. با تعریف سیاستی که مشخص می‌کند چه منابعی می‌توانند در صفحات شما بارگذاری شوند، امکان بهره‌برداری غیرمجازی کاهش یافته و از این طریق آسیب‌پذیری‌های ناشی از بارگذاری کدهای مخرب کاسته می‌شود.

تعریف CSP بسیار ساده است و با اضافه کردن یک هدر HTTP Content-Security-Policy به پاسخ‌های صفحه انجام می‌شود. این هدر شامل قوانین مختلفی است که مرورگر باید آنها را رعایت کند، از جمله منابعی که اجازه بارگذاری دارند مانند تصاویر، اسکریپت‌ها، استایل‌شیت‌ها و غیره.

نمونه‌ای از سیاست امنیتی محتوا

در زیر نمونه‌ای از تعریف CSP آمده است که تنها به اسکریپت‌ها و استایل‌شیت‌هایی که از دامنه معتبر example.com بارگذاری می‌شوند، اجازه بارگذاری می‌دهد:

Content-Security-Policy: script-src 'self' https://example.com; style-src 'self' https://example.com;

این تنظیمات به مرورگر می‌گویند که فقط منابع اسکریپت و استایل از دامنه‌های ذکر شده قابل بارگذاری هستند. هر چیز دیگری بلوک می‌شود.

جزئیات کد خط به خط

Content-Security-Policy:
این عبارت ابتدای سیاست امنیتی محتوا را مشخص می‌کند.
script-src 'self' https://example.com;
این بخش مشخص می‌کند که منابع اسکریپت باید یا از دامنه فعلی ('self') یا از https://example.com بارگذاری شوند.
style-src 'self' https://example.com;
این قسمت اعلام می‌کند که استایل‌ها تنها باید از دامنه فعلی ('self') یا از https://example.com بارگذاری شوند.

سوالات متداول

؟

چگونه CSP می‌تواند به امنیت وب‌سایت کمک کند؟

؟

آیا CSP می‌تواند به صورت عقب‌نشین (fallback) عمل کند؟

؟

آیا می‌توان CSP را برای دامنه‌های مختلف متفاوت تعریف کرد؟