Logo GH

سیاست های امنیتی و CSP

1) چرا ما به سیاست های امنیتی نیاز داریم

ظاهر مدرن و API به بسیاری از منابع (CDN، تجزیه و تحلیل، PSP، 3DS، چت) بستگی دارد. بدون سیاست های سخت، خطرات XSS، clickjacking، نشت داده ها و ربودن جلسه افزایش می یابد. سیاست های امنیتی با انتقال مرورگر به مدل allow-list، آنچه را که به طور پیش فرض مجاز است محدود می کند.

2) ستون های اساسی

CSP (سیاست امنیت محتوا) یک «منو» متمرکز از منابع و رفتارهای مجاز JS/CSS/رسانه است.
انواع قابل اعتماد - حفاظت از نوع در برابر DOM-XSS.
SRI (یکپارچگی Subresource) - کنترل یکپارچگی اسکریپت ها/سبک ها.
COOP/COEP/CORP - جداسازی سفت و سخت از زمینه ها و منابع بین منابع.
Fetch Metadata («Sec-Fetch-») یک راه حل سرور برای فیلتر کردن درخواست های متقابل سایت است.
CORS - سیاست دسترسی API متقابل دامنه.
عناوین کلاسیک: HSTS، 'X-Frame-Options'/'frame-ancestors'، 'Referrer-Policy'، 'Permissions-Policy'، SameSite-cookies.

3) CSP: مبانی و اصول

3. 1 دستورالعمل ها (کلید)

'dafault-src' - پیش فرض برای دستورالعمل های دیگر.
'script-src' - منابع JS، nonce/hash، 'strict-dynamic'، 'report-sample'.
'style-src' - منابع CSS ؛ «unsafe-inline» را به حداقل برسانید.
'img-src', 'font-src', 'media-src', 'object-src' (معمولاً 'none').
'connect-src' - درخواستهای شبکه (XHR/fetch/WebSocket).
'frame-src'/'child-src' - فریم های شخص ثالث (PSP، 3DS).
«frame-ancestors» - که می تواند سایت ما را جاسازی کند (ضد کلیک کردن).
'base-uri' - جایگزینی <base> 'را ممنوع می کند.
«فرم عمل» - جایی که فرم ها مجاز به ارائه هستند.
«upgrade-insecure-requests», «block-all-mixed-content» - مبارزه با مخلوط HTTP/HTTPS.
'report-uri'/'report-to' - که در آن برای ارسال نقض.

3. 2 هش و Nonce

رویکرد Nonce: برای هر پاسخ HTTP یک "nonce" رمزنگاری تصادفی ایجاد کنید، "<script nonce ="... ">" را به اسکریپتهای درون خطی و "script-src" nonc- "... اضافه کنید

رویکرد هش: هش ثابت از محتوای درون خطی. مناسب برای HTML استاتیک، ناخوشایند برای دینامیک.
«strict-dynamic»: فقط اسکریپتهای قابل اعتماد که توسط یک اسکریپت «قابل اعتماد» بارگذاری شدهاند (با nonce/hash). حذف نیاز به لیست دامنه های هدف در طول بوت پویا، اما نیاز به مرورگرهای مدرن است.

3. 3 ممنوعیت «نا امن»

اجتناب از «ناامن درون خطی»، «ناامن eval». اگر فریمورک نیاز به eval دارد (برای مثال source-map در dev)، فقط شامل dev باشد.
برای سبک ها - در صورت امکان بدون inlines از «nonce» یا «hash» استفاده کنید.

3. 4 نمونه ای از CSP سخت (نقطه نبرد)


Content-Security-Policy:
default-src 'none';
base-uri 'self';
object-src 'none';
script-src 'self' 'nonce-{RANDOM}' 'strict-dynamic' https://www. googletagmanager. com;
style-src 'self' 'nonce-{RANDOM}';
img-src 'self' data: https://images. example-cdn. com;
font-src 'self' https://fonts. gstatic. com;
connect-src 'self' https://api. example. com wss://ws. example. com;
frame-src https://3ds. psp. com https://pay. psp. com;
frame-ancestors 'none';
form-action 'self' https://pay. psp. com;
upgrade-insecure-requests;
report-to csp-endpoint; report-sample
💡 به طور موقت به عنوان 'Content-Security-Policy-Report-Only' اجرا می شود، گزارش ها را جمع آوری می کند، اشکال زدایی می کند و سپس اجرا می شود.

4) انواع قابل اعتماد (DOM-XSS)

این دستورالعمل را فعال کنید: "Content-Security-Policy: require-trusted-types-for" script "; «trusted-types app default».
یک خط مشی واحد در کد ("پنجره ایجاد کنید. انواع قابل اعتماد ایجاد خط مشی («برنامه»، {createHTML () {...}})).
منع تکالیف ناامن ("عنصر. innerHTML = "...) بدون انواع قابل اعتماد.
ادغام چارچوب (React/Angular/Vue): استفاده از API های رندر امن، جلوگیری از خطرناک بودن SetInnerHTML.

5) SRI (یکپارچگی CDN)

برای «<script> »/« <link>» خارجی، از «integrity =» sha256-... "crossorigin =" ناشناس" '.
مکمل های SRI، نه جایگزین، CSP. هنگام ارتقاء یک نسخه CDN، هش را به روز کنید.

6) Clickjacking و فریم ها

روش مدرن «frame-ancestors» است (جایگزین «X-Frame-Options» منسوخ شده است).

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.