Defaults.Exposed › رفع اشکالها › Clickjacking protection (X-Frame-Options)
چطور Clickjacking protection (X-Frame-Options) را رفع کنید
یک دستورالعمل یکخطی که به مرورگرها میگوید اجازه ندهند وبسایتهای دیگر سایت شما را بهآرامی داخل خودشان بارگذاری کنند. بدون آن، یک کلاهبردار میتواند صفحات واقعی و login شدهی شما را پشت یک صفحهی جعلی پنهان کند و مشتریان را فریب دهد که روی چیزهایی کلیک کنند که هرگز قصد نداشتند — تأیید پرداخت، تغییر رمز عبور، اعطای دسترسی.
نتیجه نهایی برای کسبوکار شما: یک کلاهبردار میتواند بهطور نامرئی وبسایت زندهی شما را داخل یک صفحهی جعلی بپیچد و پول یا دسترسی حساب را از مشتریان login شدهی شما بدزدد — و برای مشتری به نظر میرسد سایت شما این کار را کرده است. اصلاح رایگان است و حدود ۱۵ دقیقه از وقت توسعهدهنده میگیرد.
هزینه این برای شما
- یک کلاهبردار صفحهی login یا پرداخت واقعی شما را پشت یک صفحهی بیخطر پنهان میکند و یک مشتری را فریب میدهد که یک انتقال یا تغییر تنظیمات را 'تأیید' کند بدون اینکه متوجه شود — مشتری شما را سرزنش میکند، نه مهاجم را.
- ناحیهی حساب login شدهی شما بهطور نامرئی روی یک صفحهی 'برنده شدی — کلیک کن برای ادعا' بارگذاری میشود؛ کلیک واقعاً یک تغییر واقعی در حساب مشتری را تأیید میکند.
- تیم IT یک مشتری احتمالی یک اسکن امنیتی سریع قبل از امضا اجرا میکند، میبیند سایت شما میتواند توسط هر کسی embed شود، و آن را به عنوان ریسک علامتگذاری میکند که معامله را متوقف یا از دست میدهد.
- برند شما طعمهی یک کمپین تقلب میشود؛ مشتریانی که گیر افتادند آن را به عنوان 'شرکتی که سایتش اجازه داد این اتفاق بیفتد' به یاد میآورند.
- حسابرسی یا اسکن بیمهی سایبری محافظت clickjacking گمشده را به عنوان یک شکست بهداشت پایه فهرست میکند.
چرا اهمیت دارد. این یک تنظیم رایگان یکخطی است که چند دقیقه برای اضافه کردن طول میکشد، و یک کلاس کامل از ترفندهای هدفمند علیه مشتریان login شدهی شما را میبندد. در نمرهگذاری ما یک بررسی امنیت وب با ارزش-امتیاز-واقعی با شدت بالا است.
این چیست، به زبان ساده
وقتی کسی از وبسایت شما بازدید میکند، مرورگرشان همچنین میتواند به سایت شما گفته شود داخل وبسایت دیگری بارگذاری شود — مثل یک پنجرهی کوچک embed شده داخل یک صفحهی بزرگتر. این گاهی بیخطر است. اما مکانیزمی است که پشت حملهای به نام clickjacking است.
ترفند اینگونه است. یک کلاهبردار صفحهی خود را میسازد و بهآرامی وبسایت واقعی شما را داخل آن — بهطور نامرئی، کاملاً شفاف — بارگذاری میکند. سپس محتوای خودشان را روی آن میگذارند. مشتری شما صفحهی مهاجم را میبیند و روی آنچه یک دکمهی بیخطر به نظر میرسد کلیک میکند. اما چون وبسایت واقعی شما بهطور نامرئی زیر مکاننما قرار دارد، کلیک واقعاً روی صفحهی شما میافتد — تأیید یک پرداخت، تغییر رمز عبور، تأیید دسترسی.
محافظت clickjacking یک دستورالعمل کوتاه نامرئی است که وبسایت شما به هر مرورگر بازدیدکننده میفرستد:
«اجازه نده وبسایتهای دیگر مرا داخل خودشان بارگذاری کنند. اگر کسی امتحان کند، رد کن.»
مرورگرهای مدرن به طور خودکار اطاعت میکنند. با آن روشن، ترفند به سادگی کار نمیکند.
این چقدر ممکن است برای شما هزینه داشته باشد
-
‘تأیید’ نامرئی. یک مشتری در یک تب در پرتال حساب شما login است. روی صفحهای میافتند که یک دکمهی ‘ادامه’ بزرگ نشان میدهد. پنهان زیر آن دکمه کنترل ‘تأیید انتقال’ یا ‘تغییر ایمیل’ واقعی از session login شدهی آنها بارگذاری شده است. روی ‘ادامه’ کلیک میکنند — و ناخواسته یک تغییر واقعی را در حساب واقعیشان مجاز میکنند.
-
ربودن تنظیمات. یک مهاجم صفحهی تنظیمات حساب شما را فریم میکند و یک بازی یا نظرسنجی بیآزار را روی آن میگذارد. چند کلیک در جاهای مناسب بهآرامی یک تنظیم را برمیگرداند.
-
معاملهای که متوقف میشود. یک مشتری بزرگتر پرسشنامهی امنیتی استاندارد خود را قبل از امضا میفرستد. یک خط میپرسد آیا سایت شما محافظت anti-framing تنظیم کرده.
-
برند-به-عنوان-طعمه. چون صفحات واقعی مورد اعتماد شما میتوانند embed شوند، یک مهاجم از login یا checkout شما به عنوان لایهی قانعکننده در یک کمپین فیشینگ گستردهتر استفاده میکند.
در واقع چیست
دو header وجود دارد و بررسی ما قبول میشود اگر هر کدام حاضر باشند:
۱. Header قدیمیتر — X-Frame-Options:
X-Frame-Options: SAMEORIGIN
دو مقدار عملی میگیرد:
SAMEORIGIN— سایت خودتان میتواند صفحات خودش را embed کند، اما هیچ سایت خارجی نمیتواند.DENY— هیچکس نمیتواند صفحات شما را embed کند، از جمله شما.
۲. Header مدرن — Content-Security-Policy frame-ancestors:
Content-Security-Policy: frame-ancestors 'self';
frame-ancestors 'self'— معادلSAMEORIGIN.frame-ancestors 'none'— معادلDENY.frame-ancestors 'self' https://partner.example.com— سایت خودتان به علاوه یک شریک مورد اعتماد نامبرده شده.
«خوب» چه شکلی است
قویترین راهاندازی هر دو را استفاده میکند: frame-ancestors برای مرورگرهای مدرن و X-Frame-Options: SAMEORIGIN به عنوان fallback برای مشتریان قدیمیتر.
یک جزئیات مهم: یک header Content-Security-Policy-Report-Only هیچچیزی را اجرا نمیکند — فقط گزارش میدهد.
چگونه آن را رفع کنیم (رایگان، ~۱۵ دقیقه)
این بخش را به هر کسی که وبسایت شما را اجرا میکند بدهید. اصلاح رایگان است.
مرحله ۱ — تصمیم بگیرید چقدر سختگیرانه باشید
- بیشتر کسبوکارها:
SAMEORIGIN/frame-ancestors 'self'. سایت خودتان کار میکند؛ خارجیها بلاک هستند. - اگر سایتتان هرگز صفحات خودش را embed نمیکند:
DENY/frame-ancestors 'none'برای حداکثر lockdown. - اگر یک شریک واقعی باید یک صفحهی خاص را embed کند: آنها را با
frame-ancestors 'self' https://partner.example.com;صریحاً نام ببرید.
مرحله ۲ — 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 های پاسخ را بررسی کنید.
اشتباهات رایج
- استفاده از یک CSP report-only و فرض اینکه محافظت میکند.
Content-Security-Policy-Report-Onlyفقط تخلفات را گزارش میکند — هیچچیزی را اجرا نمیکند. - تنظیم دو header
Content-Security-Policyجداگانه. اگر از قبل CSP دارید،frame-ancestorsرا به آن اضافه کنید نه اینکه یک سیاست دوم emit کنید. - تنظیم
DENYوقتی سایت خودتان صفحات خودش را embed میکند.DENYهمه framing را بلاک میکند، از جمله خودتان. - فقط محافظت صفحهی اصلی. صفحاتی که برای clickjacking بیشترین اهمیت دارند login شده هستند — تنظیمات حساب، تأیید پرداخت، ادمین.
- فرض کردن HTTPS یا قفل قبلاً این را پوشش میدهد. رمزگذاری و anti-framing بیربط هستند.
پرسشهای متداول
من تکنیکی نیستم — آیا میتوانم خودم این را حل کنم؟
نیازی نیست بخش فنی را انجام دهید. یک تنظیم تنها است که به سرور وبسایت یا CDN شما اضافه میشود، و هر توسعهدهنده یا ارائهدهندهی IT میتواند در چند دقیقه آن را اضافه کند. بخش 'چگونه آن را رفع کنیم' را به آنها بدهید.
آیا این سایت خودم یا شرکای مشروع را از نمایش صفحاتم باز میدارد؟
فقط اگر خیلی سختگیرانه تنظیم کنید. تنظیم رایج ('SAMEORIGIN'، یا 'frame-ancestors self') همچنان اجازه میدهد وبسایت خودتان صفحات خودش را embed کند — فقط سایتهای خارجی را بلاک میکند.
ما یک کسبوکار کوچک هستیم — آیا واقعاً کسی مرا هدف قرار میدهد؟
این حملات در bulk توسط ابزارهای خودکار اجرا میشوند، نه دستچین شده. سایتهای کوچکتر اغلب دقیقاً به این دلیل مورد ضربه قرار میگیرند که محافظتهای پایه مثل این را ندارند. بستن شکاف برای شما هیچ هزینهای ندارد.
'خوب' واقعاً چه شکلی است؟
یا یک `X-Frame-Options` header تنظیم شده روی SAMEORIGIN (یا DENY)، یا یک Content-Security-Policy با دستورالعمل frame-ancestors — ایدهآل هر دو. بررسی ما قبول میشود اگر هر کدام حاضر باشند.
مگر این همان قفل SSL یا HTTPS نیست؟
نه — آنها علیه چیزهای کاملاً متفاوت محافظت میکنند. HTTPS اتصال را رمزگذاری میکند. محافظت clickjacking از بارگذاری صفحات شما داخل سایت دیگری جلوگیری میکند. بررسیهای جداگانه هستند و هر دو را میخواهید.
اگر رفع نکنیم، نمره را پایین میآورد؟
بله. این یک بررسی امنیت وب نمرهگذاری شده است، نه اطلاعاتی — یک header گمشده امتیاز را پایین میآورد و با شدت بالا رتبهبندی میشود.