Thread Starter
#0
Günümüzün dijital dünyasında web güvenliği, herhangi bir çevrimiçi varlık için hayati bir önem taşımaktadır. Web sunucuları, siber saldırganların sürekli hedefindedir ve bu tehditlere karşı güçlü savunmalar geliştirmek kaçınılmazdır. Nginx, yüksek performansı ve esnekliği ile bilinen popüler bir web sunucusu olmanın yanı sıra, HTTP başlıkları aracılığıyla güvenlik duruşunu önemli ölçüde güçlendirme yeteneği sunar. HTTP başlıkları, istemci ve sunucu arasındaki iletişimde ek meta bilgiler taşıyan kritik bileşenlerdir. Bu başlıkların doğru yapılandırılması, yaygın web zafiyetlerine karşı etkili bir koruma kalkanı oluşturarak kullanıcı verilerinin güvenliğini sağlamaya yardımcı olur. Bu bağlamda, Nginx üzerindeki HTTP başlıklarının güvenlik odaklı ayarları, modern web uygulamalarının olmazsa olmaz bir parçası haline gelmiştir.
HSTS, bir web sitesinin yalnızca HTTPS üzerinden erişilebilir olmasını sağlayarak tarayıcıları güvensiz HTTP bağlantılarını kullanmaktan alıkoyan güçlü bir güvenlik mekanizmasıdır. Bu başlık, ortadaki adam (Man-in-the-Middle) saldırılarına karşı koruma sağlar ve özellikle kamuya açık Wi-Fi ağları gibi potansiyel olarak güvensiz ortamlarda kullanıcıların verilerinin şifreli kalmasını garanti eder. Nginx üzerinde `add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";` komutu ile kolayca uygulanabilir. Burada `max-age` süresi, tarayıcının siteyi ne kadar süre boyunca yalnızca HTTPS üzerinden ziyaret etmesi gerektiğini belirtir. `includeSubDomains` ile tüm alt alan adları da korunur, `preload` ise tarayıcıların siteyi önceden HSTS listesine eklemesini sağlar. Bu uygulama, site güvenilirliğini artırırken kullanıcı deneyimini de iyileştirir.
Clickjacking, kötü niyetli kişilerin kullanıcıları farkında olmadan bir öğeye tıklamaya ikna ettiği bir saldırı türüdür. Bu tür saldırılar genellikle kötü amaçlı bir sitenin, hedef siteyi bir `iframe` içine gömerek kullanıcı eylemlerini manipüle etmesiyle gerçekleşir. `X-Frame-Options` HTTP başlığı, web sitesi içeriğinin başka bir site tarafından `iframe`, `frame`, `embed` veya `object` etiketi içinde görüntülenip görüntülenemeyeceğini kontrol etmenizi sağlar. Nginx'te bu başlık, `add_header X-Frame-Options "SAMEORIGIN";` veya `add_header X-Frame-Options "DENY";` şeklinde ayarlanabilir. `SAMEORIGIN` yalnızca aynı alan adı içindeki kaynaklardan gömülmesine izin verirken, `DENY` tamamen gömülmesini yasaklar. Bu basit ama etkili başlık, sitenizi clickjacking saldırılarından koruyarak kullanıcı etkileşimlerinin güvenliğini sağlar.
MIME sniffing, tarayıcıların bir dosyanın veya içeriğin türünü, HTTP başlıklarında belirtilen `Content-Type` değerine bakmaksızın kendi tahmin algoritmalarıyla belirlemeye çalışmasıdır. Bu durum, saldırganların bir resim dosyası gibi görünen ancak aslında zararlı kod içeren dosyaları yükleyerek güvenlik açıklarına yol açmasına neden olabilir. Örneğin, bir metin dosyası gibi sunulan zararlı JavaScript kodunun tarayıcı tarafından yürütülmesi ciddi riskler taşır. `X-Content-Type-Options` başlığı, tarayıcılara `Content-Type` başlığının değiştirilmemesi ve içeriğin belirtildiği türden başka bir şekilde yorumlanmaması gerektiğini bildirir. Nginx'te `add_header X-Content-Type-Options "nosniff";` komutuyla bu başlık etkinleştirilir. Bu, tarayıcıların zararlı MIME sniffing davranışını engeller ve sitenizi bu tür saldırılardan korur.
Content-Security-Policy (CSP), modern web güvenlik mekanizmaları arasında en kapsamlılarından biridir. Bu başlık, sitenizin hangi kaynaklardan içerik (JavaScript, CSS, görseller, fontlar vb.) yükleyebileceğini belirleyerek siteler arası komut çalıştırma (XSS) ve veri enjeksiyonu saldırılarını büyük ölçüde azaltır. CSP, bir sitenin içeriğine yönelik potansiyel tehditleri proaktif olarak engeller. Nginx üzerinde `add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' https://fonts.gstatic.com;";` gibi kurallar tanımlanabilir. Bu karmaşık başlık, farklı içerik türleri için ayrı ayrı güvenli kaynakları belirlemenize olanak tanır. Doğru uygulandığında, CSP sitenizin güvenlik duruşunu radikal bir şekilde güçlendirir ve birçok yaygın web zafiyetine karşı etkili bir savunma sağlar.
`Referrer-Policy` başlığı, bir web sitesinin başka bir siteye istek yaparken HTTP `Referer` başlığında ne kadar bilgi gönderileceğini kontrol eder. Bu başlık, kullanıcı gizliliğini artırmak ve hassas bilgilerin yanlışlıkla sızmasını önlemek için önemlidir. Örneğin, `add_header Referrer-Policy "no-referrer-when-downgrade";` ayarı, HTTPS'ten HTTP'ye geçişlerde referrer bilgisinin gönderilmesini engellerken, aynı protokol içindeki yönlendirmelerde bilgi gönderilmesine izin verir. Ek olarak, `Feature-Policy` (veya yeni adıyla `Permissions-Policy`), tarayıcıların belirli API'leri veya web özelliklerini kullanmasını kısıtlamaya olanak tanır. Örneğin, `geolocation` veya `camera` erişimini devre dışı bırakabilirsiniz. Nginx üzerinde `add_header Feature-Policy "geolocation 'none'; camera 'none'; microphone 'none'";` gibi bir ayar, sitenizin belirli özelliklere erişimini sınırlayarak potansiyel güvenlik ve gizlilik risklerini azaltır.
Nginx, varsayılan olarak `Server` HTTP başlığında sürüm bilgisini gösterir. Bu durum, saldırganların belirli Nginx sürümündeki bilinen zafiyetleri hedef almasına olanak tanıyabilir. Bu nedenle, sunucu sürüm bilgisini gizlemek iyi bir güvenlik uygulamasıdır. `nginx.conf` dosyasında `http` bloğu içinde `server_tokens off;` komutuyla bu bilgi gizlenebilir. Bu, Nginx'in `Server` başlığında sadece "Nginx" göstermesini sağlar, sürüm numarasını belirtmez. Ek olarak, `.htaccess` gibi hassas dosyaların doğrudan erişimini engellemek için Nginx yapılandırmasına `location ~ /\.ht { deny all; }` gibi kurallar eklenebilir. Bu basit ancak etkili önlemler, genel sunucu güvenliğini artırır ve potansiyel saldırganlar için keşif sürecini zorlaştırarak sitenizi daha dirençli hale getirir.
HSTS (HTTP Strict Transport Security) Uygulaması
HSTS, bir web sitesinin yalnızca HTTPS üzerinden erişilebilir olmasını sağlayarak tarayıcıları güvensiz HTTP bağlantılarını kullanmaktan alıkoyan güçlü bir güvenlik mekanizmasıdır. Bu başlık, ortadaki adam (Man-in-the-Middle) saldırılarına karşı koruma sağlar ve özellikle kamuya açık Wi-Fi ağları gibi potansiyel olarak güvensiz ortamlarda kullanıcıların verilerinin şifreli kalmasını garanti eder. Nginx üzerinde `add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";` komutu ile kolayca uygulanabilir. Burada `max-age` süresi, tarayıcının siteyi ne kadar süre boyunca yalnızca HTTPS üzerinden ziyaret etmesi gerektiğini belirtir. `includeSubDomains` ile tüm alt alan adları da korunur, `preload` ise tarayıcıların siteyi önceden HSTS listesine eklemesini sağlar. Bu uygulama, site güvenilirliğini artırırken kullanıcı deneyimini de iyileştirir.
X-Frame-Options ile Clickjacking Koruması
Clickjacking, kötü niyetli kişilerin kullanıcıları farkında olmadan bir öğeye tıklamaya ikna ettiği bir saldırı türüdür. Bu tür saldırılar genellikle kötü amaçlı bir sitenin, hedef siteyi bir `iframe` içine gömerek kullanıcı eylemlerini manipüle etmesiyle gerçekleşir. `X-Frame-Options` HTTP başlığı, web sitesi içeriğinin başka bir site tarafından `iframe`, `frame`, `embed` veya `object` etiketi içinde görüntülenip görüntülenemeyeceğini kontrol etmenizi sağlar. Nginx'te bu başlık, `add_header X-Frame-Options "SAMEORIGIN";` veya `add_header X-Frame-Options "DENY";` şeklinde ayarlanabilir. `SAMEORIGIN` yalnızca aynı alan adı içindeki kaynaklardan gömülmesine izin verirken, `DENY` tamamen gömülmesini yasaklar. Bu basit ama etkili başlık, sitenizi clickjacking saldırılarından koruyarak kullanıcı etkileşimlerinin güvenliğini sağlar.
X-Content-Type-Options ile MIME Sniffing Engelleme
MIME sniffing, tarayıcıların bir dosyanın veya içeriğin türünü, HTTP başlıklarında belirtilen `Content-Type` değerine bakmaksızın kendi tahmin algoritmalarıyla belirlemeye çalışmasıdır. Bu durum, saldırganların bir resim dosyası gibi görünen ancak aslında zararlı kod içeren dosyaları yükleyerek güvenlik açıklarına yol açmasına neden olabilir. Örneğin, bir metin dosyası gibi sunulan zararlı JavaScript kodunun tarayıcı tarafından yürütülmesi ciddi riskler taşır. `X-Content-Type-Options` başlığı, tarayıcılara `Content-Type` başlığının değiştirilmemesi ve içeriğin belirtildiği türden başka bir şekilde yorumlanmaması gerektiğini bildirir. Nginx'te `add_header X-Content-Type-Options "nosniff";` komutuyla bu başlık etkinleştirilir. Bu, tarayıcıların zararlı MIME sniffing davranışını engeller ve sitenizi bu tür saldırılardan korur.
Content-Security-Policy (CSP) ile Gelişmiş Koruma
Content-Security-Policy (CSP), modern web güvenlik mekanizmaları arasında en kapsamlılarından biridir. Bu başlık, sitenizin hangi kaynaklardan içerik (JavaScript, CSS, görseller, fontlar vb.) yükleyebileceğini belirleyerek siteler arası komut çalıştırma (XSS) ve veri enjeksiyonu saldırılarını büyük ölçüde azaltır. CSP, bir sitenin içeriğine yönelik potansiyel tehditleri proaktif olarak engeller. Nginx üzerinde `add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' https://fonts.gstatic.com;";` gibi kurallar tanımlanabilir. Bu karmaşık başlık, farklı içerik türleri için ayrı ayrı güvenli kaynakları belirlemenize olanak tanır. Doğru uygulandığında, CSP sitenizin güvenlik duruşunu radikal bir şekilde güçlendirir ve birçok yaygın web zafiyetine karşı etkili bir savunma sağlar.
Referrer-Policy ve Feature-Policy Kullanımı
`Referrer-Policy` başlığı, bir web sitesinin başka bir siteye istek yaparken HTTP `Referer` başlığında ne kadar bilgi gönderileceğini kontrol eder. Bu başlık, kullanıcı gizliliğini artırmak ve hassas bilgilerin yanlışlıkla sızmasını önlemek için önemlidir. Örneğin, `add_header Referrer-Policy "no-referrer-when-downgrade";` ayarı, HTTPS'ten HTTP'ye geçişlerde referrer bilgisinin gönderilmesini engellerken, aynı protokol içindeki yönlendirmelerde bilgi gönderilmesine izin verir. Ek olarak, `Feature-Policy` (veya yeni adıyla `Permissions-Policy`), tarayıcıların belirli API'leri veya web özelliklerini kullanmasını kısıtlamaya olanak tanır. Örneğin, `geolocation` veya `camera` erişimini devre dışı bırakabilirsiniz. Nginx üzerinde `add_header Feature-Policy "geolocation 'none'; camera 'none'; microphone 'none'";` gibi bir ayar, sitenizin belirli özelliklere erişimini sınırlayarak potansiyel güvenlik ve gizlilik risklerini azaltır.
Sunucu Bilgilerini Gizleme ve Diğer İpuçları
Nginx, varsayılan olarak `Server` HTTP başlığında sürüm bilgisini gösterir. Bu durum, saldırganların belirli Nginx sürümündeki bilinen zafiyetleri hedef almasına olanak tanıyabilir. Bu nedenle, sunucu sürüm bilgisini gizlemek iyi bir güvenlik uygulamasıdır. `nginx.conf` dosyasında `http` bloğu içinde `server_tokens off;` komutuyla bu bilgi gizlenebilir. Bu, Nginx'in `Server` başlığında sadece "Nginx" göstermesini sağlar, sürüm numarasını belirtmez. Ek olarak, `.htaccess` gibi hassas dosyaların doğrudan erişimini engellemek için Nginx yapılandırmasına `location ~ /\.ht { deny all; }` gibi kurallar eklenebilir. Bu basit ancak etkili önlemler, genel sunucu güvenliğini artırır ve potansiyel saldırganlar için keşif sürecini zorlaştırarak sitenizi daha dirençli hale getirir.