Defaults.Exposed

Defaults.Exposedرفع اشکال‌ها › Clickjacking protection (X-Frame-Options)

چطور Clickjacking protection (X-Frame-Options) را رفع کنید

یک دستورالعمل یک‌خطی که به مرورگرها می‌گوید اجازه ندهند وب‌سایت‌های دیگر سایت شما را به‌آرامی داخل خودشان بارگذاری کنند. بدون آن، یک کلاهبردار می‌تواند صفحات واقعی و login شده‌ی شما را پشت یک صفحه‌ی جعلی پنهان کند و مشتریان را فریب دهد که روی چیزهایی کلیک کنند که هرگز قصد نداشتند — تأیید پرداخت، تغییر رمز عبور، اعطای دسترسی.

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

هزینه این برای شما

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

این چیست، به زبان ساده

وقتی کسی از وب‌سایت شما بازدید می‌کند، مرورگرشان همچنین می‌تواند به سایت شما گفته شود داخل وب‌سایت دیگری بارگذاری شود — مثل یک پنجره‌ی کوچک embed شده داخل یک صفحه‌ی بزرگ‌تر. این گاهی بی‌خطر است. اما مکانیزمی است که پشت حمله‌ای به نام clickjacking است.

ترفند اینگونه است. یک کلاهبردار صفحه‌ی خود را می‌سازد و به‌آرامی وب‌سایت واقعی شما را داخل آن — به‌طور نامرئی، کاملاً شفاف — بارگذاری می‌کند. سپس محتوای خودشان را روی آن می‌گذارند. مشتری شما صفحه‌ی مهاجم را می‌بیند و روی آنچه یک دکمه‌ی بی‌خطر به نظر می‌رسد کلیک می‌کند. اما چون وب‌سایت واقعی شما به‌طور نامرئی زیر مکان‌نما قرار دارد، کلیک واقعاً روی صفحه‌ی شما می‌افتد — تأیید یک پرداخت، تغییر رمز عبور، تأیید دسترسی.

محافظت clickjacking یک دستورالعمل کوتاه نامرئی است که وب‌سایت شما به هر مرورگر بازدیدکننده می‌فرستد:

«اجازه نده وب‌سایت‌های دیگر مرا داخل خودشان بارگذاری کنند. اگر کسی امتحان کند، رد کن.»

مرورگرهای مدرن به طور خودکار اطاعت می‌کنند. با آن روشن، ترفند به سادگی کار نمی‌کند.

این چقدر ممکن است برای شما هزینه داشته باشد

  1. ‘تأیید’ نامرئی. یک مشتری در یک تب در پرتال حساب شما login است. روی صفحه‌ای می‌افتند که یک دکمه‌ی ‘ادامه’ بزرگ نشان می‌دهد. پنهان زیر آن دکمه کنترل ‘تأیید انتقال’ یا ‘تغییر ایمیل’ واقعی از session login شده‌ی آن‌ها بارگذاری شده است. روی ‘ادامه’ کلیک می‌کنند — و ناخواسته یک تغییر واقعی را در حساب واقعی‌شان مجاز می‌کنند.

  2. ربودن تنظیمات. یک مهاجم صفحه‌ی تنظیمات حساب شما را فریم می‌کند و یک بازی یا نظرسنجی بی‌آزار را روی آن می‌گذارد. چند کلیک در جاهای مناسب به‌آرامی یک تنظیم را برمی‌گرداند.

  3. معامله‌ای که متوقف می‌شود. یک مشتری بزرگ‌تر پرسشنامه‌ی امنیتی استاندارد خود را قبل از امضا می‌فرستد. یک خط می‌پرسد آیا سایت شما محافظت anti-framing تنظیم کرده.

  4. برند-به-عنوان-طعمه. چون صفحات واقعی مورد اعتماد شما می‌توانند embed شوند، یک مهاجم از login یا checkout شما به عنوان لایه‌ی قانع‌کننده در یک کمپین فیشینگ گسترده‌تر استفاده می‌کند.

در واقع چیست

دو header وجود دارد و بررسی ما قبول می‌شود اگر هر کدام حاضر باشند:

۱. Header قدیمی‌تر — X-Frame-Options:

X-Frame-Options: SAMEORIGIN

دو مقدار عملی می‌گیرد:

۲. Header مدرن — Content-Security-Policy frame-ancestors:

Content-Security-Policy: frame-ancestors 'self';

«خوب» چه شکلی است

قوی‌ترین راه‌اندازی هر دو را استفاده می‌کند: frame-ancestors برای مرورگرهای مدرن و X-Frame-Options: SAMEORIGIN به عنوان fallback برای مشتریان قدیمی‌تر.

یک جزئیات مهم: یک header Content-Security-Policy-Report-Only هیچ‌چیزی را اجرا نمی‌کند — فقط گزارش می‌دهد.

چگونه آن را رفع کنیم (رایگان، ~۱۵ دقیقه)

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

مرحله ۱ — تصمیم بگیرید چقدر سختگیرانه باشید

مرحله ۲ — Header ها را اضافه کنید

Nginx:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;

Apache:

Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"

Microsoft IIS:

<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />

Cloudflare: به Rules → Transform Rules → Modify Response Header بروید، و دو قانون اضافه کنید.

از قبل یک Content-Security-Policy برای دلایل دیگر ارسال می‌کنید؟ یک header CSP دوم ایجاد نکنید — frame-ancestors را به سیاست موجود اضافه کنید.

مرحله ۳ — Reload کنید و تأیید کنید

سرور وب را reload کنید یا قانون CDN را deploy کنید، سپس سایت live خود را بارگذاری کنید و header های پاسخ را بررسی کنید.

اشتباهات رایج

پرسش‌های متداول

من تکنیکی نیستم — آیا می‌توانم خودم این را حل کنم؟

نیازی نیست بخش فنی را انجام دهید. یک تنظیم تنها است که به سرور وب‌سایت یا CDN شما اضافه می‌شود، و هر توسعه‌دهنده یا ارائه‌دهنده‌ی IT می‌تواند در چند دقیقه آن را اضافه کند. بخش 'چگونه آن را رفع کنیم' را به آن‌ها بدهید.

آیا این سایت خودم یا شرکای مشروع را از نمایش صفحاتم باز می‌دارد؟

فقط اگر خیلی سختگیرانه تنظیم کنید. تنظیم رایج ('SAMEORIGIN'، یا 'frame-ancestors self') همچنان اجازه می‌دهد وب‌سایت خودتان صفحات خودش را embed کند — فقط سایت‌های خارجی را بلاک می‌کند.

ما یک کسب‌وکار کوچک هستیم — آیا واقعاً کسی مرا هدف قرار می‌دهد؟

این حملات در bulk توسط ابزارهای خودکار اجرا می‌شوند، نه دستچین شده. سایت‌های کوچک‌تر اغلب دقیقاً به این دلیل مورد ضربه قرار می‌گیرند که محافظت‌های پایه مثل این را ندارند. بستن شکاف برای شما هیچ هزینه‌ای ندارد.

'خوب' واقعاً چه شکلی است؟

یا یک `X-Frame-Options` header تنظیم شده روی SAMEORIGIN (یا DENY)، یا یک Content-Security-Policy با دستورالعمل frame-ancestors — ایده‌آل هر دو. بررسی ما قبول می‌شود اگر هر کدام حاضر باشند.

مگر این همان قفل SSL یا HTTPS نیست؟

نه — آن‌ها علیه چیزهای کاملاً متفاوت محافظت می‌کنند. HTTPS اتصال را رمزگذاری می‌کند. محافظت clickjacking از بارگذاری صفحات شما داخل سایت دیگری جلوگیری می‌کند. بررسی‌های جداگانه هستند و هر دو را می‌خواهید.

اگر رفع نکنیم، نمره را پایین می‌آورد؟

بله. این یک بررسی امنیت وب نمره‌گذاری شده است، نه اطلاعاتی — یک header گمشده امتیاز را پایین می‌آورد و با شدت بالا رتبه‌بندی می‌شود.