مخفیسازی هویت سرور در NGINX (حذف هدرهای Server و X-Powered-By)
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۰۵ ۰۸:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Server: Kestrel X-Powered-By: ASP.NET
Server: nginx/1.18.0 (Ubuntu) X-Powered-By: ASP.NET
Server: nginx/1.18.0: به مهاجم میگوید شما از NGINX نسخه 1.18.0 استفاده میکنید. اگر یک حفره امنیتی (CVE) برای این نسخه خاص وجود داشته باشد، مهاجم مستقیماً به سراغ آن میرود.X-Powered-By: ASP.NET: به مهاجم میگوید تکنولوژی سمت سرور شما ASP.NET است و باید از بردارهای حمله مخصوص این پلتفرم استفاده کند.server_tokensServer: nginx/1.18.0 شماره نسخه را فاش میکند.server_tokens./etc/nginx/nginx.conf و داخل بلوک http قرار میگیرد.# فایل: /etc/nginx/nginx.conf
http {
# ... سایر تنظیمات
# این دستور نسخه NGINX را از هدر Server حذف میکند
server_tokens off;
# ...
}server_tokens off;:Server: nginx/1.18.0Server: nginxServer: nginx همچنان وجود دارد.X-Powered-By را از Kestrel گرفته و به کلاینت تحویل میدهد.proxy_hide_header.server یا location سایت خود، جایی که proxy_pass را تعریف کردهاید، قرار دهید.# فایل: /etc/nginx/sites-available/my-app.conf
server {
# ...
location / {
proxy_pass http://my_aspnet_backend;
# حذف هدرهای افشاگر از پاسخ سرور پشتیبان
proxy_hide_header X-Powered-By;
# ممکن است Kestrel هدر Server: Kestrel را هم بفرستد، آن را هم میتوانیم حذف کنیم
proxy_hide_header Server;
# ... سایر تنظیمات پراکسی
}
}Server: nginxServer: nginx همچنان باقی است. اگر بخواهیم آن را هم به طور کامل حذف کنیم یا با یک نام دلخواه جایگزین کنیم، چه باید کرد؟ngx_headers_more که قابلیتهای بسیار بیشتری برای دستکاری هدرها در اختیار ما قرار میدهد.nginx-extrasnginx-extras وجود دارد که نسخهای از NGINX است که با تعداد زیادی ماژول اضافی و کاربردی (از جمله ngx_headers_more) از پیش کامپایل شده است.nginx-extras:# ابتدا NGINX قبلی را حذف کرده و نسخه کامل را نصب میکنیم sudo apt update sudo apt install nginx-extras
# فایل: /etc/nginx/sites-available/my-app.conf
server {
# ...
server_tokens off; # همچنان بهترین رویه است
# روش اول: حذف کامل هدر Server
# ما مقدار آن را با یک رشته خالی جایگزین میکنیم
more_set_headers 'Server: ';
# -- یا --
# روش دوم: جایگزین کردن هدر Server با یک نام دلخواه
# more_set_headers 'Server: My-Secret-Web-Server';
location / {
# ...
proxy_hide_header X-Powered-By;
# ...
}
}nginx.conf دستور server_tokens off; را قرار دهید. این حداقل کاری است که باید انجام شود.proxy_hide_header X-Powered-By; (و در صورت نیاز proxy_hide_header Server;)، اطلاعات ارسالی از سمت Kestrel را حذف کنید.nginx-extras را نصب کرده و با استفاده از دستور more_set_headers 'Server: ';، هدر Server را به طور کامل از پاسخهای خود حذف کنید.