هدرهای امنیتی
هشت هدری که wardex میسنجد، وزن هرکدام در امتیاز و نحوهی افزودنشان.
هشت هدری که wardex میسنجد، وزن هرکدام در امتیاز و نحوهی افزودنشان.
هدرهای امنیتی دستورهایی هستند که سرور همراه هر صفحه به مرورگر میفرستد؛ مثلاً «این سایت را فقط با HTTPS باز کن» یا «اجازه نده سایت دیگری این صفحه را در خودش نمایش دهد». افزودن آنها چند خط تنظیم است و جلوی دستهی بزرگی از حملهها را میگیرد.
هر ۶ ساعت wardex صفحهی اصلی را باز میکند و بررسی میکند کدامیک از ۸ هدر زیر حضور دارند. هر هدر وزن مشخصی دارد و جمع وزنها ۱۰۰ است:
Content-Security-Policy
جلوی اجرای اسکریپت تزریقی (XSS) را میگیرد
Strict-Transport-Security
مرورگر را مجبور به HTTPS میکند
X-Content-Type-Options
حدس زدن نوع فایل را ممنوع میکند
X-Frame-Options
جلوی قرار دادن سایت در iframe (کلیکدزدی)
Referrer-Policy
نشت آدرس صفحه به سایتهای دیگر
Permissions-Policy
دسترسی به دوربین، میکروفون، موقعیت
Cross-Origin-Opener-Policy
جداسازی پنجره از سایتهای دیگر
Cross-Origin-Embedder-Policy
کنترل منابعی که صفحه بارگذاری میکند
امتیاز نهایی، وضعیت بررسی را تعیین میکند:
۷۰ تا ۱۰۰
۴۰ تا ۶۹
زیر ۴۰
علاوه بر حضور هدر، wardex مقدار Content-Security-Policy را هم میخواند. اگر شامل unsafe-inline یا unsafe-eval باشد، بهعنوان «تنظیم ضعیف» گزارش میشود.
اینها همان تنظیماتی هستند که اسکن امنیتی هم پیشنهاد میدهد. پیش از اعمال روی سایت اصلی، روی محیط آزمایشی امتحانشان کنید.
این خطها را داخل بلوک server سایت بگذارید:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self'; object-src 'none'; frame-ancestors 'self'" always;
سپس پیکربندی را امتحان و بارگذاری کنید:
sudo nginx -t && sudo systemctl reload nginx
ماژول headers باید فعال باشد (a2enmod headers). سپس در فایل VirtualHost یا .htaccess:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always set Content-Security-Policy "default-src 'self'; object-src 'none'; frame-ancestors 'self'"