چرا هدر امنیتی برای سایت شما حیاتی است؟
هر بار که مرورگر کاربری درخواستی به سرور شما میفرستد، سرور علاوه بر محتوای اصلی، مجموعهای از هدرهای HTTP را نیز ارسال میکند. این هدرها به مرورگر میگویند که چگونه محتوا را پردازش کند. اما بسیاری از این هدرها نقش امنیتی دارند و به مرورگر دستور میدهند که رفتارهای پرخطری مانند اجرای اسکریپت از منابع ناشناس یا نمایش سایت شما در یک iframe خارجی را مسدود کند.
متأسفانه، تنظیم پیشفرض وردپرس و بسیاری از هاستهای اشتراکی، این هدرهای امنیتی را فعال نمیکنند. نتیجه این میشود که سایت شما در برابر حملات رایجی مانند XSS (Cross-Site Scripting)، Clickjacking و MIME Sniffing آسیبپذیر باقی میماند. در این مقاله، قدمبهقدم یاد میگیرید که مهمترین هدرهای امنیتی را بدون شکستن قابلیتهای سایت خود فعال کنید.
مهمترین هدرهای امنیتی که باید تنظیم کنید
سه هدر زیر بیشترین تأثیر را در امنیت سایت شما دارند و در عین حال اگر اشتباه تنظیم شوند، میتوانند سایت را از کار بیندازند. پس با دقت مراحل را دنبال کنید.
1. هدر Content-Security-Policy (CSP)
هدر Content-Security-Policy به مرورگر میگوید که از کدام منابع مجاز است اسکریپت، استایل، تصویر یا فونت بارگذاری کند. اگر مهاجمی بتواند اسکریپت مخربی را در سایت شما تزریق کند (مثلاً از طریق یک فرم بدون اعتبارسنجی)، CSP جلوی اجرای آن را میگیرد.
یک نمونه ساده و امن برای شروع:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'
در این مثال:
default-src 'self'یعنی همه منابع فقط از دامنه خودتان بارگذاری شوند.script-srcاجازه اجرای اسکریپتهای داخلی و اسکریپتهای jQuery از CDN را میدهد.'unsafe-inline'برای استایلهای inline و برخی اسکریپتهای وردپرس لازم است، اما سعی کنید در آینده آن را حذف کنید.img-srcاجازه بارگذاری تصاویر از هر منبع HTTPS را میدهد.
اشتباه رایج: اگر افزونههای وردپرسی شما از اسکریپتهای inline استفاده میکنند (بسیاری از افزونههای اسلایدر و صفحهسازها چنین هستند)، حذف 'unsafe-inline' باعث میشود سایت شما کاملاً از کار بیفتد. همیشه ابتدا در حالت آزمایشی تنظیم کنید.
2. هدر Strict-Transport-Security (HSTS)
هدر Strict-Transport-Security به مرورگر میگوید که سایت شما فقط از طریق HTTPS در دسترس است و هرگز نباید از HTTP استفاده کند. این هدر از حملات Man-in-the-Middle جلوگیری میکند.
نمونه تنظیم:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000یعنی مرورگر به مدت یک سال این قانون را به خاطر بسپارد.includeSubDomainsیعنی زیردامنهها هم باید HTTPS باشند.preloadبه مرورگرهای مدرن میگوید که این دامنه را در لیست HSTS خود ثبت کنند.
نکته مهم: قبل از فعال کردن includeSubDomains مطمئن شوید که همه زیردامنههای شما (مثل mail.example.com یا blog.example.com) گواهی SSL معتبر دارند. در غیر این صورت، کاربران دیگر نمیتوانند به آن زیردامنهها دسترسی پیدا کنند.
3. هدر X-Frame-Options
هدر X-Frame-Options از حملات Clickjacking جلوگیری میکند. در این حمله، مهاجم سایت شما را در یک iframe شفاف قرار میدهد و کاربر فکر میکند روی دکمههای سایت خودش کلیک میکند، در حالی که در واقع روی دکمههای سایت مهاجم کلیک میکند.
تنظیم امن:
X-Frame-Options: SAMEORIGIN
این مقدار به مرورگر میگوید که فقط صفحاتی از همان دامنه میتوانند سایت شما را در iframe نمایش دهند. اگر نیاز دارید سایت شما در دامنه دیگری (مثل یک پنل پرداخت) نمایش داده شود، میتوانید از ALLOW-FROM https://example.com استفاده کنید، اما این مقدار در مرورگرهای مدرن پشتیبانی نمیشود و بهتر است از frame-ancestors در CSP استفاده کنید.
چگونه هدرهای امنیتی را در وردپرس فعال کنیم؟
سه روش اصلی برای فعال کردن هدرهای امنیتی وجود دارد. بسته به سطح دسترسی شما به سرور، یکی از این روشها را انتخاب کنید.
روش ۱: استفاده از فایل .htaccess (سادهترین روش)
اگر از آپاچی استفاده میکنید، کد زیر را به انتهای فایل .htaccess در ریشه سایت اضافه کنید:
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
بعد از اعمال تغییرات، سایت را با یک مرورگر در حالت ناشناس باز کنید و با ابزارهای آنلاین مثل securityheaders.com بررسی کنید که هدرها به درستی ارسال میشوند.
روش ۲: استفاده از افزونه وردپرس
اگر دسترسی به فایلهای سرور ندارید یا نمیخواهید کدنویسی کنید، میتوانید از افزونههای امنیتی مانند Wordfence یا Really Simple SSL استفاده کنید. این افزونهها معمولاً در بخش تنظیمات امنیتی، گزینهای برای فعال کردن هدرهای امنیتی دارند.
با این حال، دقت کنید که افزونهها گاهی تنظیمات CSP را خیلی سختگیرانه اعمال میکنند و ممکن است سایت شما را از کار بیندازند. همیشه بعد از فعالسازی، تمام صفحات سایت را تست کنید.
روش ۳: تنظیم در سطح سرور (Nginx)
اگر از Nginx استفاده میکنید، کد زیر را به بلوک server در فایل کانفیگ اضافه کنید:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
بعد از اعمال تغییرات، Nginx را ریاستارت کنید:
sudo systemctl reload nginx
هدرهای امنیتی تکمیلی که نباید فراموش کنید
علاوه بر سه هدر اصلی، چند هدر دیگر هم هستند که امنیت سایت شما را به طور قابل توجهی افزایش میدهند.
X-Content-Type-Options
این هدر از حملات MIME Sniffing جلوگیری میکند. در این حمله، مرورگر سعی میکند نوع فایل را از روی محتوای آن حدس بزند، نه از روی هدر Content-Type. این میتواند منجر به اجرای فایلهای مخرب شود.
X-Content-Type-Options: nosniff
Referrer-Policy
این هدر کنترل میکند که چه اطلاعاتی از آدرس صفحه شما هنگام کلیک روی لینکها به سایت مقصد ارسال شود. تنظیم strict-origin-when-cross-origin بهترین تعادل بین حریم خصوصی و قابلیت استفاده است.
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy
این هدر به شما اجازه میدهد که ویژگیهای مرورگر مانند دوربین، میکروفون و GPS را در سایت خود محدود کنید. این کار از سوءاستفاده اسکریپتهای مخرب جلوگیری میکند.
Permissions-Policy: camera=(), microphone=(), geolocation=()
اشتباهات رایج در تنظیم هدر امنیتی
در این بخش، رایجترین اشتباهاتی که هنگام تنظیم هدرهای امنیتی رخ میدهد را بررسی میکنیم تا شما دچار آنها نشوید.
اشتباه ۱: فعال کردن HSTS قبل از اطمینان از HTTPS کامل
اگر سایت شما هنوز روی HTTP فعال است یا گواهی SSL شما برای همه زیردامنهها معتبر نیست، فعال کردن HSTS باعث میشود کاربران نتوانند به سایت شما دسترسی پیدا کنند. مرورگر به مدت یک سال (یا هر مدت که در max-age تعیین کردهاید) از اتصال به سایت شما از طریق HTTP جلوگیری میکند.
اشتباه ۲: تنظیم CSP خیلی سختگیرانه
بسیاری از سایتهای وردپرسی از اسکریپتهای inline و استایلهای داینامیک استفاده میکنند. اگر CSP را خیلی سختگیرانه تنظیم کنید، سایت شما به درستی نمایش داده نمیشود. راهحل این است که ابتدا با مقدار Content-Security-Policy-Report-Only شروع کنید تا فقط خطاها را گزارش دهد و سایت را از کار نیندازد:
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri /csp-violation-endpoint
بعد از چند روز بررسی گزارشها، میتوانید منابع مورد نیاز را به لیست مجاز اضافه کنید و سپس هدر را به حالت عادی تغییر دهید.
اشتباه ۳: فراموش کردن هدرها در صفحات کش شده
اگر از افزونه کش مانند W3 Total Cache استفاده میکنید، ممکن است هدرهای امنیتی در صفحات کش شده اعمال نشوند. بعد از تنظیم هدرها، حتماً کش سایت را پاک کنید و دوباره بررسی کنید.
جمعبندی و گامهای بعدی
تنظیم هدرهای امنیتی یکی از سادهترین و مؤثرترین راهها برای افزایش امنیت سایت شماست. با اعمال سه هدر اصلی (CSP، HSTS و X-Frame-Options) و چند هدر تکمیلی، میتوانید از رایجترین حملات وب جلوگیری کنید.
برای اطمینان از درستی تنظیمات، از ابزارهای آنلاین مانند securityheaders.com و Mozilla Observatory استفاده کنید. این ابزارها به شما نمره میدهند و پیشنهادهای مشخصی برای بهبود ارائه میکنند.
اگر به دنبال راهکاری جامعتر برای امنیت سایت خود هستید، سرورنت (ServerNet) خدمات میزبانی وب با تنظیمات امنیتی پیشرفته ارائه میدهد که میتواند به شما در پیادهسازی این هدرها در سطح سرور کمک کند. اما به یاد داشته باشید که حتی در یک هاست اشتراکی ساده هم میتوانید با روشهای گفته شده در این مقاله، امنیت سایت خود را به طور چشمگیری افزایش دهید.
در نهایت، به یاد داشته باشید که امنیت یک فرآیند است، نه یک مقصد. هدرهای امنیتی را تنظیم کنید، به طور منظم سایت خود را تست کنید و از آخرین بهروزرسانیهای امنیتی وردپرس و افزونههای خود غافل نشوید.