اگر این ۳ تنظیم ساده را انجام ندهید، سایت شما هدف آسان هکرهاست!

اگر این ۳ تنظیم ساده را انجام ندهید، سایت شما هدف آسان هکرهاست!

بیش از نیمی از یک میلیون سایت پرترافیک دنیا، حتی ابتدایی‌ترین هدرهای امنیتی را ندارند. این عدد نشان می‌دهد مشکل، پیچیدگی فنی نیست؛ بی‌توجهی است.

در واقع، تنظیمات امنیتی ساده سایت معمولاً چند دقیقه بیشتر زمان نمی‌برند. با این‌حال، همین چند دقیقه، فاصله بین یک سایت آسیب‌پذیر و یک سایت با دفاع پایه واقعی را می‌سازد.

پاسخ کوتاه: تنظیمات امنیتی ساده سایت شامل سه مورد اصلی است: هدرهای امنیتی HTTP، فلگ‌های امن کوکی (Secure، HttpOnly، SameSite)، و غیرفعال‌سازی Directory Listing به‌همراه مخفی‌کردن نسخه سرور. هر سه با چند خط پیکربندی در Nginx یا Apache قابل اجرا هستند.

طبق تحلیل ژوئن ۲۰۲۶ روی یک میلیون سایت برتر دنیا، فقط ۴۰٪ از سایت‌ها هدر X-Frame-Options را دارند؛ همان هدر ساده‌ای که جلوی حمله Clickjacking را می‌گیرد. نتیجه نگران‌کننده‌تر این‌که بیش از نیمی از سایت‌های بررسی‌شده (۴۴۰,۸۳۲ سایت) در ارزیابی هدرهای امنیتی پایه، نمره Fگرفته‌اند.

چرا با وجود سادگی، این تنظیمات اجرا نمی‌شوند؟

دلیل اصلی، پیچیدگی فنی نیست. در واقع، این تنظیمات معمولاً چون «فوری» به‌نظر نمی‌رسند، در صف کارهای عقب‌افتاده باقی می‌مانند. بنابراین، تیم توسعه روی قابلیت‌های جدید تمرکز می‌کند و تنظیمات امنیتی ساده سایت، ساکت و بدون فشار مستقیم، فراموش می‌شوند.

چرا اندازه کوچک تنظیم، به‌معنی اثر کوچک نیست؟

هر سه تنظیم این مقاله، مستقیماً جلوی یک روش شناخته‌شده حمله را می‌گیرند. هدرهای امنیتی جلوی Clickjacking و اجرای اسکریپت ناخواسته را می‌گیرند؛ فلگ‌های کوکی جلوی سرقت نشست را می‌گیرند؛ و غیرفعال‌سازی Directory Listing جلوی جمع‌آوری اطلاعات سیستمی توسط مهاجم را می‌گیرد. هیچ‌کدام «تزئینی» نیستند.

نکته فنی: بعد از اعمال هر تغییر، می‌توانید با دستور curl -I https://sitename.com/ در ترمینال، هدرهای واقعی برگشتی از سرور را ببینید؛ بدون نیاز به هیچ ابزار اضافه‌ای.

پیش از رفتن سراغ پیاده‌سازی، تفاوت عملی وجود و نبود این تنظیمات را باید دید. راهنمای هدرهای HTTP سازمان OWASP این تفاوت را برای هر هدر، به‌طور مجزا و در واقع با جزئیات کامل، مستند کرده است.

ریسکبدون تنظیمات امنیتی ساده سایتبا تنظیمات امنیتی ساده سایت
Clickjacking (جاسازی سایت در iframe مخرب)ممکن و رایجمسدود با X-Frame-Options
سرقت نشست از طریق کوکیکوکی در دسترس اسکریپت و شبکه ناامنمحدود با Secure و HttpOnly
جمع‌آوری اطلاعات سیستمی توسط مهاجملیست فایل‌ها و نسخه سرور قابل‌مشاهدهمخفی با غیرفعال‌سازی Directory Listing

در واقع، راهکار پیشنهادی، اعمال هر سه تنظیم امنیتی ساده سایت در یک نشست کاری واحد است، نه پخش‌کردن آن‌ها در چند هفته آینده.

مزایا

  • هر سه تنظیم در کمتر از ۱۰ دقیقه روی اکثر سرورها قابل اجرا هستند
  • بدون نیاز به تغییر در کد اصلی اپلیکیشن (اکثراً فقط پیکربندی سرور وب)
  • پوشش هم‌زمان سه دسته حمله متفاوت: Clickjacking، سرقت نشست، و شناسایی سیستم

معایب

  • نیاز به راه‌اندازی مجدد (Reload) سرویس Nginx یا Apache بعد از هر تغییر
  • اگر سایت پشت چند لایه پراکسی باشد، باید تنظیمات در همه لایه‌ها هماهنگ شود
  • فلگ SameSite=Strict روی برخی فرم‌های ورود از دامنه دیگر، ممکن است نیاز به تست اضافه داشته باشد

در واقع، تیم سنتیوا در پروژه‌های تقویت تنظیمات امنیتی ساده سایت این مراحل را عملی می‌کند:

  • اسکن اولیه سایت برای مشخص‌کردن دقیق کدام هدرها و فلگ‌ها از قبل فعال‌اند و کدام‌ها نیستند
  • پیاده‌سازی هر سه تنظیم روی محیط تست، پیش از اعمال روی سرور اصلی
  • هماهنگ‌سازی تنظیمات بین لایه‌های مختلف (پراکسی، سرور وب، اپلیکیشن) در معماری‌های چندلایه
  • ارائه گزارش نهایی با نتیجه تست هدرها و کوکی‌ها بعد از اعمال تغییرات

اصل طلایی: تنظیمات امنیتی ساده سایت را همیشه اول روی محیط تست اعمال کنید، نه مستقیم سرور اصلی. چون بیشتر این تغییرات فقط چند خط پیکربندی هستند، تست کردن‌شان هم چند دقیقه بیشتر طول نمی‌کشد.

سناریوی این راهنما: یک سایت شرکتی فرضی به آدرس company-example.ir در نظر می‌گیریم. این سایت پشت Nginx به‌عنوان reverse proxy و یک بک‌اند PHP-FPM اجرا می‌شود؛ دستورات معادل Apache هم برای تیم‌هایی که از آن استفاده می‌کنند آمده است. دقیقاً همین نام دامنه در تمام مراحل زیر تکرار می‌شود.

تنظیم ۱: هدرهای امنیتی HTTP

۱. هدرهای امنیتی در NginxNginx — server block
server { server_name company-example.ir; add_header X-Frame-Options "DENY" always; add_header X-Content-Type-Options "nosniff" always; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always; }

در واقع، این پنج هدر، سه دسته حمله را هدف می‌گیرند. X-Frame-Options جلوی Clickjacking را می‌گیرد؛ X-Content-Type-Options جلوی اجرای فایل به‌عنوان نوع اشتباه (MIME-sniffing) را می‌گیرد؛ و Strict-Transport-Security مرورگر را مجبور می‌کند همیشه از HTTPS استفاده کند.

۲. هدرهای امنیتی معادل در ApacheApache — httpd.conf / .htaccess
<IfModule mod_headers.c> Header always set X-Frame-Options "DENY" Header always set X-Content-Type-Options "nosniff" Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" Header always set Referrer-Policy "strict-origin-when-cross-origin" </IfModule>

اگر سایت روی Apache اجرا می‌شود، فقط کافی است ماژول mod_headers فعال باشد. به همین دلیل، بعد از هر دو تغییر، سرویس مربوطه باید Reload شود تا هدرها روی درخواست‌های جدید اعمال شوند.

تنظیم ۲: فلگ‌های امن کوکی

۳. فلگ‌های امن کوکی نشست در PHPPHP — php.ini
session.cookie_secure = 1 session.cookie_httponly = 1 session.cookie_samesite = "Strict"

این سه فلگ با هم کار می‌کنند. Secure کوکی را فقط روی HTTPS ارسال می‌کند؛ HttpOnly دسترسی جاوااسکریپت به کوکی را می‌بندد؛ و SameSite از ارسال ناخواسته کوکی در درخواست‌های بین‌سایتی جلوگیری می‌کند. طبق راهنمای مدیریت نشست OWASP، ترکیب هر سه، دفاع لایه‌ای واقعی در برابر سرقت نشست می‌سازد.

۴. اجبار فلگ‌های کوکی در لایه Nginx (برای اپلیکیشن‌های legacy)Nginx — proxy_cookie_flags
location / { proxy_pass http://127.0.0.1:9000; proxy_cookie_flags ~ secure httponly samesite=strict; }

با این‌حال، وقتی تغییر مستقیم کد اپلیکیشن قدیمی امکان‌پذیر نیست، همین یک خط در Nginx می‌تواند فلگ‌های امن را به هر کوکی عبوری از پراکسی اضافه کند.

تنظیم ۳: غیرفعال‌سازی Directory Listing و مخفی‌کردن نسخه سرور

۵. غیرفعال‌سازی Directory Listing و مخفی‌کردن نسخه در NginxNginx — server block
server { server_name company-example.ir; autoindex off; server_tokens off; }

در واقع، autoindex off جلوی نمایش لیست فایل‌های یک پوشه بدون index را می‌گیرد. همچنین، server_tokens off نسخه دقیق Nginx را از هدر پاسخ حذف می‌کند تا مهاجم نتواند مستقیم دنبال آسیب‌پذیری‌های شناخته‌شده همان نسخه بگردد.

۶. غیرفعال‌سازی Directory Listing و مخفی‌کردن نسخه در ApacheApache — httpd.conf
<Directory /var/www/company-example.ir> Options -Indexes </Directory> ServerTokens Prod ServerSignature Off

در نهایت، بعد از اعمال هر سه تنظیم، دوباره با curl -I هدرهای پاسخ را چک کنید و مطمئن شوید هیچ پوشه‌ای بدون فایل index، لیست فایل‌ها را نشان نمی‌دهد.

هرگز این کارها را در اعمال تنظیمات امنیتی ساده سایت نکنید. هدرهای امنیتی را فقط روی صفحه اصلی اعمال نکنید؛ باید روی کل دامنه فعال باشند. SameSite=Strict را بدون تست روی فرم‌های ورود از دامنه دیگر فعال نکنید. غیرفعال‌کردن Directory Listing را جایگزین رفع آسیب‌پذیری واقعی فایل‌های حساس در دسترس نکنید. و هیچ‌وقت بعد از تغییر پیکربندی، Reload سرویس را فراموش نکنید؛ چون بدون آن، تغییرات اعمال نمی‌شوند.

یک نمونه معمول: سایت شرکتی با پنل مدیریت

«تا قبل از این بررسی، اصلاً نمی‌دانستیم لیست کامل فایل‌های پوشه آپلود، برای هر بازدیدکننده‌ای قابل مشاهده است. یک تنظیم دو‌خطی این مشکل را برای همیشه حل کرد.»

در واقع، این تجربه در بین سایت‌های کوچک و متوسط با تیم فنی محدود بسیار رایج است. به همین دلیل، جمع‌بندی نتیجه معمول این مسیر ارزش توجه دارد:

  • شناسایی حداقل یک پوشه با Directory Listing فعال که تا آن لحظه کسی متوجه‌اش نشده بود
  • فعال‌سازی کامل هر سه تنظیم در یک نشست کاری، بدون نیاز به توقف سرویس
  • کاهش محسوس سطح اطلاعاتی که مهاجم می‌تواند بدون تلاش زیاد از سایت جمع‌آوری کند

فوری (همین امروز)

  • افزودن پنج هدر امنیتی اصلی به پیکربندی Nginx یا Apache
  • غیرفعال‌سازی Directory Listing و مخفی‌کردن نسخه سرور

کوتاه‌مدت (این هفته)

  • تنظیم فلگ‌های Secure، HttpOnly و SameSite روی کوکی‌های نشست
  • تست کامل با curl -I و بررسی رفتار فرم‌های ورود بعد از فعال‌سازی SameSite

بلندمدت (مستمر)

  • افزودن این سه تنظیم به چک‌لیست راه‌اندازی هر سرور یا سرویس جدید
  • بازبینی دوره‌ای هدرها بعد از هر تغییر معماری (مثل افزودن CDN یا پراکسی جدید)

سوالات متداول تخصصی

آیا اعمال این تنظیمات امنیتی ساده سایت باعث خرابی سایت می‌شود؟

به‌ندرت. تنها موردی که نیاز به تست دقیق‌تر دارد، فلگ SameSite=Strict روی سایت‌هایی با ورود از دامنه دیگر است؛ اما بقیه تنظیمات معمولاً بدون اثر جانبی هستند.

آیا این تنظیمات جایگزین WAF یا آنتی‌ویروس سرور است؟

نه. در واقع این‌ها لایه دفاعی پایه‌ای هستند که هر سایتی باید داشته باشد؛ مکمل ابزارهایی مثل WAF‌اند، نه جایگزین آن‌ها.

برای سایت‌های پشت CDN، این تنظیمات کجا باید اعمال شوند؟

بهتر است هم روی سرور اصلی و هم در تنظیمات CDN اعمال شوند. به این ترتیب، هدرها در تمام مسیر درخواست حفظ می‌شوند.

چطور بفهمیم کدام هدرهای امنیتی از قبل روی سایت فعال هستند؟

ساده‌ترین راه، اجرای دستور curl -I روی آدرس سایت و بررسی خط‌به‌خط هدرهای پاسخ سرور است.

آیا Directory Listing واقعاً همچنان یک ریسک جدی است؟

بله. در واقع بسیاری از سایت‌ها هنوز پوشه‌های آپلود یا بک‌آپ بدون فایل index دارند که بدون این تنظیم، کاملاً قابل مرور برای هر بازدیدکننده‌ای است.

اعمال کامل هر سه تنظیم امنیتی ساده سایت چقدر طول می‌کشد؟

برای اکثر سایت‌های تک‌سرور، معمولاً کمتر از ۱۰ دقیقه. اما برای معماری‌های چندلایه با چند پراکسی، ممکن است به چند ساعت تست اضافه نیاز باشد.
  • تنظیمات امنیتی ساده سایت شامل سه مورد است: هدرهای امنیتی HTTP، فلگ‌های امن کوکی، و غیرفعال‌سازی Directory Listing.
  • هر سه در کمتر از ۱۰ دقیقه، بدون تغییر کد اصلی اپلیکیشن، قابل اجرا هستند.
  • هرکدام مستقیماً جلوی یک دسته حمله شناخته‌شده را می‌گیرد: Clickjacking، سرقت نشست، و جمع‌آوری اطلاعات سیستمی.
  • بهترین روش، اعمال هر سه هم‌زمان روی محیط تست و سپس انتقال به سرور اصلی است.
  • بی‌توجهی به این تنظیمات، دلیل فنی ندارد؛ فقط یک اولویت فراموش‌شده است.

تنظیمات امنیتی ساده سایت، کم‌هزینه‌ترین سرمایه‌گذاری امنیتی است که همین امروز می‌توانید انجام دهید.

منبع رایگان

«چک‌لیست ۳ تنظیم امنیتی ساده سایت» را رایگان دریافت کنید

دستورات آماده Nginx و Apache برای هر سه تنظیم، در یک چک‌لیست قابل‌چاپ.

یا تماس مستقیم

نوشته‌های مشابه