راهنمای خط‌مشی امنیتی محتوا

این سند توصیه‌هایی درباره نحوه پیکربندی «خط‌مشی امنیتی محتوا» (CSP) وب‌سایت برای «میانای برنامه‌سازی کاربردی جاوا اسکریپت Maps» ارائه می‌دهد. ازآنجایی‌که کاربران نهایی از انواع و نسخه‌های مختلف مرورگر استفاده می‌کنند، توسعه‌دهندگان تشویق می‌شوند که از این مثال به‌عنوان مرجع استفاده کنند و آن را تا زمانی که دیگر هیچ نقض CSP رخ ندهد، تنظیم دقیق کنند.

درباره «خط‌مشی امنیت محتوا» بیشتر بدانید.

خط‌مشی امنیتی محتوای سخت‌گیرانه

برای کمک به محافظت از وب‌سایتتان دربرابر حملات دستورات بین‌سایتی (XSS)، توصیه می‌کنیم به‌جای CSP فهرست مجاز، از CSP سخت‌گیرانه استفاده کنید. ‫Maps JavaScript API از استفاده از CSP سخت‌گیرانه مبتنی بر nonce پشتیبانی می‌کند. وب‌سایت‌ها باید هر دو عنصر script و style را با مقدار یک‌بارمصرف پر کنند. در داخل، Maps JavaScript API اولین عنصر از این نوع را پیدا می‌کند و مقدار nonce آن را به‌ترتیب برای عناصر سبک یا اسکریپت درج‌شده توسط اسکریپت API اعمال می‌کند.

کلیدواژه 'strict-dynamic' در مثال زیر به اسکریپتی که دارای یک nonce معتبر است اجازه می‌دهد اسکریپت‌های دیگر را بار کند. چون صفحه‌تان Maps JavaScript API را با nonce بار می‌کند، API می‌تواند اسکریپت‌های اضافی موردنیازش را بار کند، بنابراین لازم نیست هیچ‌کدام از دامنه‌های Google را در script-src فهرست کنید. مرورگرهایی که از 'strict-dynamic' پشتیبانی می‌کنند https: منبع را در مثال نادیده می‌گیرند؛ این فقط یک جایگزین برای مرورگرهای قدیمی‌تر است.

مثال

مثال زیر یک CSP نمونه را به‌همراه صفحه HTML که در آن جاسازی شده است نشان می‌دهد:

خط‌مشی امنیتی محتوای نمونه

script-src 'nonce-{script value}' 'strict-dynamic' https: 'unsafe-eval' blob:;
img-src 'self' https://*.googleapis.com https://*.gstatic.com *.google.com *.googleusercontent.com data:;
frame-src *.google.com;
connect-src 'self' https://*.googleapis.com *.google.com https://*.gstatic.com data: blob:;
font-src https://fonts.gstatic.com;
style-src 'nonce-{style value}' https://fonts.googleapis.com;
worker-src blob:;

نمونه صفحه HTML

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css" nonce="{style value}">
    <style nonce="{style value}">...</style>
    ...
  </head>
  <body>
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap" async nonce="{script value}"></script>
    <script nonce="{script value}"> function initMap() { ... } </script>
  </body>
</html>

فهرست مجازهای CSP

اگر «خط‌مشی امنیت محتوا» فهرست مجازها را راه‌اندازی کرده‌اید، لطفاً به فهرست دامنه‌های Google Maps مراجعه کنید. توصیه می‌کنیم برای به‌روز ماندن، این سند و یادداشت‌های انتشار Maps JavaScript API را مطالعه کنید و درصورت نیاز، هر دامنه سرویس جدیدی را به فهرست مجاز اضافه کنید.

وب‌سایت‌هایی که Maps JavaScript API را از دامنه قدیمی Google APIs (برای مثال maps.google.com) یا دامنه مختص منطقه (برای مثال maps.google.fr) بار می‌کنند، باید این نام‌های دامنه را نیز در تنظیمات CSP script-src خود درج کنند، همان‌طور که در مثال زیر نشان داده شده است:

script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.googleapis.com https://*.gstatic.com *.google.com https://*.ggpht.com *.googleusercontent.com blob:;
img-src 'self' https://*.googleapis.com https://*.gstatic.com *.google.com  *.googleusercontent.com data:;
frame-src *.google.com;
connect-src 'self' https://*.googleapis.com *.google.com https://*.gstatic.com  data: blob:;
font-src https://fonts.gstatic.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
worker-src blob:;