اگر با سیاست امنیتی محتوا (CSP) آشنایی ندارید، مقدمه ای بر خط مشی امنیت محتوا نقطه شروع خوبی است. آن سند نمای گسترده تر پلتفرم وب CSP را پوشش می دهد. Chrome App CSP چندان انعطافپذیر نیست.
CSP سیاستی برای کاهش مشکلات اسکریپت بین سایتی است و همه ما می دانیم که اسکریپت نویسی بین سایتی بد است. ما قصد نداریم شما را متقاعد کنیم که CSP یک سیاست جدید گرم و مبهم است. کار درگیر است. شما باید یاد بگیرید که چگونه وظایف اساسی را متفاوت انجام دهید.
هدف این سند این است که دقیقاً به شما بگوید خطمشی CSP برای برنامههای Chrome چیست، برای پیروی از آن چه کاری باید انجام دهید، و چگونه میتوانید آن وظایف اساسی را به روشی مطابق با CSP انجام دهید.
CSP برای برنامههای Chrome چیست؟
خطمشی امنیت محتوا برای برنامههای Chrome شما را از انجام کارهای زیر محدود میکند:
- نمی توانید از اسکریپت درون خطی در صفحات برنامه Chrome خود استفاده کنید. این محدودیت هم بلوکهای
<script>
و هم کنترلکنندههای رویداد را ممنوع میکند (<button onclick="...">
). - شما نمی توانید به هیچ منبع خارجی در هیچ یک از فایل های برنامه خود ارجاع دهید (به جز منابع ویدیویی و صوتی). شما نمی توانید منابع خارجی را در iframe جاسازی کنید.
- شما نمی توانید از روش های string-to-javaScript مانند
eval()
وnew Function()
استفاده کنید.
این از طریق مقدار سیاست زیر اجرا می شود:
default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;
برنامه Chrome شما فقط میتواند به اسکریپتها و اشیاء درون برنامه شما اشاره کند، به استثنای فایلهای رسانه (برنامهها میتوانند به ویدیو و صدا خارج از بسته اشاره کنند). برنامههای افزودنی کروم به شما امکان میدهند سیاست امنیتی محتوای پیشفرض را کاهش دهید. برنامههای Chrome این کار را نمیکنند.
نحوه رعایت CSP
همه جاوا اسکریپت و همه منابع باید محلی باشند (همه چیز در برنامه Chrome شما بسته بندی می شود).
"اما پس من چطور..."
این احتمال وجود دارد که شما از کتابخانه های قالب استفاده می کنید و بسیاری از آنها با CSP کار نمی کنند. همچنین ممکن است بخواهید به منابع خارجی در برنامه خود (تصاویر خارجی، محتوای وب سایت ها) دسترسی داشته باشید.
از کتابخانه های قالب استفاده کنید
از کتابخانه ای استفاده کنید که قالب های از پیش کامپایل شده را ارائه می دهد و همه چیز آماده است. همچنان میتوانید از کتابخانهای استفاده کنید که پیشکامپایل را ارائه نمیدهد، اما نیاز به کمی کار از سوی شما دارد و محدودیتهایی وجود دارد.
شما باید از sandboxing برای جداسازی هر محتوایی که میخواهید کارهای «Eval» انجام دهید، استفاده کنید. Sandboxing CSP را روی محتوایی که شما مشخص کردهاید، افزایش میدهد. اگر میخواهید از APIهای بسیار قدرتمند Chrome در برنامه Chrome خود استفاده کنید، محتوای جعبه ایمنی شما نمیتواند مستقیماً با این APIها تعامل داشته باشد (به محتوای محلی Sandbox مراجعه کنید).
دسترسی به منابع راه دور
می توانید منابع راه دور را از طریق XMLHttpRequest
واکشی کنید و آنها را از طریق blob:
, data:
, یا filesystem:
URL ها ارائه دهید ( رجوع به منابع خارجی را ببینید).
ویدیو و صدا را میتوان از سرویسهای راه دور بارگیری کرد، زیرا در حالت آفلاین یا تحت اتصال نقطهای، رفتار بازگشتی خوبی دارند.
محتوای وب را جاسازی کنید
به جای استفاده از iframe، میتوانید با استفاده از برچسب webview به یک URL خارجی فراخوانی کنید ( به جاسازی صفحات وب خارجی مراجعه کنید).