هدر سیاست امنیت محتوا Content Security Policy یا مخفف شده اون یعنی هدر CSP ، یه لایه امنیتی اضافی است که به شناسایی و کاهش انواع خاصی از حملات از جمله Cross Site Scripting یا XSS و سایر حملات تزریق داده به سایت شما کمک می‌کنه.

البته باید در پرانتز بهتون بگیم که این حملات چی هستن و چه وظیفه‌ای دارن؟ این حملات برای هر جور کار خلافی از سرقت داده گرفته تا آسیب رسوندن به سایت و توزیع بدافزار مورد استفاده قرار می‌گیرن. در واقع وظیفه اونها خراب کردن و نابودی یه سایت هست.

هدر CSP به گونه‌ای طراحی شده که با امکانات گذشته کاملاً سازگاره. همچنین تا وقتی که CSP Header برای سرورهایی که اون رو اجرا کردن کار می‌کنه و برعکس، مرورگری از این سرتیتر CSP حمایت نمی‌کنه. این عدم حمایت هم به این شکل هست که مرورگرها به سادگی هدر سیاست امنیت محتوا رو نادیده می‌گیرن، به ساختاربندی معمول خود ادامه می‌دن و و به طور پیش فرض، روی استاندارد سیاست منبع یکسان پیش می‌رن.

بنابراین اگه سایتی هدر CSP رو جزء پیشنهادات خودش قرار نده، مرورگرها بالاجبار روی همون استاندارد سیاست منبع یکسان خودشون ادامه می‌دن.

برای فعال کردن Content Security Policy Header ، باید وب سرور خودتون رو ساختاربندی کنین تا سرفصل Content-Security-Policy HTTP رو روی کار بذاره. اگه هم X-Content-Security- Policy را مشاهده کردین، اشکالی نداره چون این نسخه قدیمیه و نیاز به تعیین اون هدر HTTP نداره.

همچنین می‌توان از عنصر «meta» برای پیکربندی سیستم امنیت محتوا استفاده کرد.
برای مثال این روند می‌تونه به شکل زیر باشه:


            <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
                            

هدر CPS باید با چه حملاتی و چگونه مقابله کنه؟

هدر سیاست امنیت محتوا

کاهش خطر حمله XSS

هدف اصلی CSP کاهش و گزارش حملات XSS است. حملات XSS از اعتماد مرورگر به محتوای دریافت شده از سرور سواستفاده می‌‌کنن. در واقع اتفاقی که میفته اینه که اسکریپت‌های مخرب توسط مرورگر قربانی اجرا می‌شن. چون مرورگر به منبع محتوا اعتماد داره، حتی اگه اسکریپت از جایی نباشه که مرورگر فکر می‌کنه از اونجا منشا گرفته.

CSP این امکان رو برای مدیران سرور فراهم می‌کنه که با تعیین دامنه‌هایی برای مرورگر کاری کنن که مرورگر حتماً منابع معتبری از اسکریپت‌های اجرایی رو در نظر بگیره. این عمل باعث می‌شه تا بردارهایی رو که به وسیله اونها XSS امکان رخداد داره کاهش پیدا کنه یا به طور کل از بین بره.
سپس یه مرورگر سازگار با هدر CSP ، اسکریپت‌های بارگیری شده در پرونده‌های منبع دریافت شده از اون دسته دامنه‌های مجاز رو اجرا می‌کنه. بنابراین این مرورگر سازگار با هدر Content Security Policy سایر اسکریپت‌های دیگه از جمله اسکریپت‌های درون خطی و ویژگی‌های HTML کنترل رویداد رو نادیده می‌گیره.

کاهش حملات درون خطی

سرور سازگار با هدر CSP علاوه بر محدود کردن دامنه‌هایی که می‌توان از اونها بارگیری کرد، سرور می‌تونه پروتکل‌های مجاز برای استفاده از دامنه‌ها رو هم تعیین کنه.
به عنوان مثال و در حالت ایده آل و‌ از نقطه نظر امنیتی، یه سرور می‌تونه تعیین کنه که تمام مطالب باید با استفاده از HTTPS بارگیری بشن.
یه استراتژی امنیتی انتقال داده کامل نه تنها شامل اجرای HTTPS برای انتقال داده، بلکه علامت‌گذاری همه کوکی‌ها با ویژگی امن و ارائه هدایت خودکار از صفحات HTTP به همتایان HTTPS اونها است. همچنین سایت ها ممکنه از سرصفحه Strict-Transport-Security HTTP برای اطمینان از اتصال مرورگرها فقط از طریق یک کانال رمزگذاری شده استفاده کنن.

کاربرد CSP چیه؟

CSP

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

در ادامه این مقاله ما چگونگی ساخت مناسب چنین هدرهایی رو توضیح داده ایم و مثال‌هایی رو برای شما ارائه کرده ایم‌.

چگونه هدر CSP خودتون رو بسازین؟

برای تعیین سرتیتر CSP خود از سرصفحه Content-Security-Policy HTTP استفاده کنین. به شکل زیر دقت کنین:


            Content-Security-Policy: policy
                            

سیاست امنیت محتوا رشته ای است که شامل دستورالعمل‌های سیاسی میشه و با هدف توصیف سیاست امنیت محتوای شما تعریف شده.

یه Content Security Policy Header با استفاده از یه سری دستورالعمل‌ها توصیف ‌می‌شه که هر یکی از اونها سیاست مربوط به نوع منبع خاص یا حوزه سیاست رو توصیف می‌کنن. هدر CSP شما باید شامل یه دستورالعمل default-src باشد که برای سایر منابع هنگامی که هدر سیاست امنیت محتوای خاص خودشون رو ندارن، جایگزین خواهد بود. برای جلوگیری از اجرای اسکریپت‌های درون خطی و همچنین جلوگیری از استفاده از eval، یه هدر باید شامل یه دستورالعمل defalt-src یا script-src باشه.

داشتن پیش‌فرض هایی چون style_src یا default_src درون هدر CSP باعث می‌شه تا سبک‌های درون خطی رو از عنصر «style» اعمال کنه. به عبارتی دیگه، دستورالعمل‌های خاصی برای موارد مختلف وجود داره. به طوری که هر کدوم می‌تونه سیاست خاص خودش رو داشته باشه. این موارد متنوع شامل فونت‌ها، فریم‌ها، تصاویر، رسانه‌های صوتی و تصویری، اسکریپت‌ها و کارگران هستن‌.

چند مورد از مثال‌های هدر CPS

هدر CSP

این بخش نمونه‌هایی از چند مثال معمول هدر سیاست امنیت محتوا رو ارائه می‌ده:

مثال ۱

یه مدیر وب سایت می‌خواد همه مطالب از منشا خود سایت باشه‌. البته این بخش شامل زیر دامنه ها نیست. پس باید کد زیر رو در نظر داشته باشه:


            Content-Security-Policy: default-src 'self'
                            

مثال ۲

یه مدیر وب سایت می‌خواد به یه محتوا با دامنه و زیردامنه‌های معتبر اجازه انتشار بده. البته لازم نیست همون دامنه‌ای باشه که CSP Header روی اون تنظیم شده. کد زیر به او کمک می‌کنه:


            Content-Security-Policy: default-src 'self' trusted.com *.trusted.com
                            

مثال ۳

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


            Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
                            

در اینجا به طور پیش فرض محتوا فقط از اصل سند مجاز است به استثنای موارد زیر:

  • تصاویر ممکن است از هرجای دیگه‌ای بارگیری بشن (به کارت حافظه “*” توجه داشته باشین).
  • رسانه فقط از media1.com و media2.com مجاز است (و نه از زیر دامنه‌های این سایت ها).
  • اسکریپت اجرایی فقط از userscripts.example.com مجاز است.

مثال ۴

یه مدیر وب سایت برای یه سایت بانکی آنلاین می‌خواد اطمینان حاصل کنه و مطمئن بشه که تمام محتوا  با استفاده از TLS بارگیری می‌شه تا از شنود درخواست‌ها توسط مهاجمین جلوگیری کنه. به کد زیر نگاه کنین:

سرور فقط به اسنادی که به طور خاص از طریق HTTPS از طریق منبع آنلاین online banking.jumbobank.com بارگیری می‌شن، اجازه دسترسی می‌ده.

مثال ۵

یه مدیر وب سایت از یه وب سایت پست الکترونیکی می‌خواد که به HTML و همچنین بارگیری تصاویر از هر جایی اجازه حضور در ایمیل‌ها رو بده. اما برای JavaScript یا سایر مطالب بالقوه خطرناک این اجازه رو صادر نکنه.


            Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *
                            

توجه داشته باشین که این مثال script-src رو مشخص نمی‌کنه. با استفاده از مثال CSP ، این سایت در واقع از تنظیمات تعیین شده توسط دستورالعمل default-src استفاده می‌کنه. این معنی که اسکریپت ها فقط از سرور اصلی بارگیری می‌شن.

چگونه هدر CSP خودتون رو آزمایش کنین؟

 report-only
برای سهولت در استقرار، CSP می‌تونه در حالت فقط گزارش report-only مستقر بشه. این نوع CSP Header عملاً اجرا نمی‌شه اما هرگونه تخلف، به URI ارائه شده گزارش می‌شه. علاوه بر این  می‌تونین از سرصفحه فقط گزارش برای آزمایش تجدیدنظر روی سر تیتر CSP در آینده  استفاده کنین بدون اینکه واقعاً این تجدیدنظر مستقر بشه.
برای تعیین هدر CSP می توانید از سرصفحه Content-Security-Policy-Policy-Report-Only استفاده کنین:

Content-Security-Policy-Report-Only: سیاست


            Content-Security-Policy-Report-Only: policy 
                            

اگر هر یک از عناوین Content-Security-Policy-Policy-Report-only و نیز Content-Security-Policy در یه پاسخ وجود داشته باشن، از هر دو هدر استفاده می‌شه. CSP مشخص شده در عناوین Policy-Security-Content در حالی اجرا می‌شن که سیاست Content-Security-Policy-Report-Only گزارشاتی رو تولید می‌کنه اما عملاً اجرا نمی‌شن.

فعال کردن گزارش CSP به چه شکل هست؟

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

سپس برای دریافت گزارشات باید سرور خودتون رو تنظیم کنین. با این کار گزارشات موجود رو به هر روشی که دوست دارین اصلاح و یا پردازش کنین.

شما امروز در این مقاله با هدر CSP ، کاربردهای این هدر و طریقه فعالسازی اون آشنا شدین. بنابراین سعی کنین از این هدر در محتواها و سایت های خودتون به خوبی استفاده کنین تا بتونین سایت و محتوای خودتون رو از خطرات و حملات احتمالی و مشابه با موارد بالا اعم از XSS حفظ کنین.

منتظر نظرات و سوالات شما درباره هدر CSP یعنی Content Security Policy Header هستیم.