Eğer varsa return 301 https://$host$request_uri;
80 numaralı bağlantı noktasında varsayılan yanıt olarak, o zaman sunucu er ya da geç [1] açık vekiller listesi binip başlayabilir internette başka bir yerde trafik göndermek için istismar ediliyor. Günlüklerin bunun gibi mesajlarla doluysa, o zaman senin başına geldiğini biliyorsun:
42.232.104.114 - - [25/Mar/2018:04:50:49 +0000] "GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1" 301 185 "http://www.ioffer.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 4.1.8.0; RogueCleaner; Alexa Toolbar)"
Sorun şu ki $host
, tarayıcının Host
başlıkta ne gönderirse gönderilsin, hatta ana bilgisayar adını HTTP'nin açılış satırından geri gönderir, bunun gibi:
GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1
Bu sorun nedeniyle, burada bazı diğer cevaplar $server_name
yerine kullanmanızı öneririz $host
. $server_name
hep ne değerlendirir sen koymak server_name
beyanı. Ancak, orada birden fazla alt etki alanınız varsa veya bir joker karakter kullanıyorsanız, bu işe yaramaz, çünkü $server_name
yalnızca bildirimden sonraki ilk girişi kullanır server_name
ve daha da önemlisi bir joker karakteri geri döndürür (genişletmez).
Peki, güvenliği sürdürürken birden fazla alanı nasıl destekleyebilirim? Kendi sistemlerimde, bu ikilemle önce , default_server
kullanmayan bir bloğu listeleyip $host
, ardından aşağıdakileri yapan bir joker karakter bloğu listeleyerek ele aldım :
server {
listen 80 default_server;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 80;
server_name *.example.com;
return 301 https://$host$request_uri;
}
(İkinci blokta birden fazla etki alanı da listeleyebilirsiniz.)
Bu kombinasyonla, example.com
eşleştirilmemiş alanlar kodlanmış (herhangi bir zamanda) kodlanmış bir yere yönlendirilir ve kendinize uygun alanlar doğru yere gider. Sunucunuz açık bir proxy olarak kullanılamaz, bu nedenle sorun çıkarmazsınız.
Eğer kaba hissediyorsanız, ben de yapabilir varsayalım default_server
blok maç hiçbiri sizin meşru alanların ve bir şey saldırısını hizmet vermektedir. . . .
[1] Teknik olarak "proxy" yanlış kelime çünkü sunucunuz dışarı çıkmıyor ve istemciler için istekleri yerine getirmiyor, sadece bir yönlendirme gönderiyor, ancak doğru kelimenin ne olacağından emin değilim. Ayrıca hedefin ne olduğundan da emin değilim, ancak günlüklerinizi gürültü ile dolduruyor ve CPU'nuzu ve bant genişliğinizi tüketiyor, bu yüzden buna bir son verebilirsiniz.