Bunu yapmanın tek güvenli yolu
Bu sayfadaki diğer tüm yanıtların bilmeniz gereken güvenlik etkileri vardır.
Geçerli etki alanını almanın tek garantili güvenli yöntemi
etmektir 𝓪 𝓼𝓮𝓬𝓾𝓻𝓮 𝓵𝓸𝓬𝓪𝓽𝓲𝓸𝓷 𝔂𝓸𝓾𝓻𝓼𝓮𝓵𝓯 𝓲𝓷 𝓲𝓽 𝓼𝓽𝓸𝓻𝓮.
Çoğu çerçeve etki alanını sizin yerinize saklamaya özen gösterir, bu nedenle kendi çerçevenize ait belgelere başvurmak istersiniz. Bir çerçeve kullanmıyorsanız alan adını aşağıdaki yerlerden birinde depolamayı düşünün:
+ ------------------------------------------------- --- + ----------------------------------- +
| Etki alanını saklama yöntemleri | Tarafından Kullanılan |
+ ------------------------------------------------- --- + ----------------------------------- +
| Bir yapılandırma dosyası | Joomla, Drupal / Symfony |
| Veritabanı | WordPress |
| Çevresel bir değişken | Laravel |
| Hizmet kaydı | Kubernetes DNS |
+ ------------------------------------------------- --- + ----------------------------------- +
Aşağıdakileri kullanabilirsiniz ... ama güvensizler
Bilgisayar korsanları bu değişkenleri istedikleri etki alanının çıktısını alabilir. Bu, önbellek zehirlenmesine ve zar zor fark edilebilir kimlik avı saldırılarına yol açabilir.
$_SERVER['HTTP_HOST']
Bu, etki alanını bilgisayar korsanları tarafından manipülasyona açık olan istek başlıklarından alır . İle aynı:
$_SERVER['SERVER_NAME']
Apache ayarı usecanonicalname kapalı ise bu daha iyi yapılabilir ; bu durumda $_SERVER['SERVER_NAME']
artık rastgele değerlerle doldurulmasına izin verilmeyecek ve güvenli olacaktır. Ancak bu varsayılan değildir ve bir kurulum için ortak değildir.
Popüler sistemlerde
Aşağıdaki etki alanını aşağıdaki çerçevelerde / sistemlerde nasıl edinebileceğiniz aşağıda açıklanmıştır:
WordPress
$urlparts = parse_url(home_url());
$domain = $urlparts['host'];
WordPress'de bir URL oluşturuyorsanız, home_url veya site_url veya diğer URL işlevlerinden herhangi birini kullanın .
laravel
request()->getHost()
request()->getHost
Fonksiyon Symfony'de devralınan ve 2013'ten beri güvenli olmuştur CVE-2013-4752 yamalı.
Drupal
Yükleyici henüz bunu güvenli hale getirmiyor ( sayı # 2404259 ). Ancak Drupal 8'de Drupal kurulumunuzu güvence altına almak için Güvenilir Ana Bilgisayar Ayarlarında takip edebileceğiniz ve bundan sonra aşağıdakilerin kullanılabileceği belgeler vardır:
\Drupal::request()->getHost();
Diğer çerçeveler
Geçerli yanıtı en sevdiğiniz çerçeveye nasıl ekleyeceğinizi dahil etmek için bu yanıtı düzenlemekte serbestsiniz. Bunu yaparken, lütfen ilgili kaynak koduna veya çerçevenin işleri güvenli bir şekilde yaptığını doğrulamama yardımcı olacak başka bir şeye bağlantı ekleyin.
ek
Sömürü örnekleri:
Bir botnet sürekli olarak yanlış ana bilgisayar üstbilgisini kullanarak bir sayfa isterse önbellek zehirlenmesi meydana gelebilir. Sonuçta ortaya çıkan HTML, saldırganların web sitesine, kullanıcılarınızı kimlik avlayabilecekleri bağlantılar içerir. İlk başta kötü niyetli bağlantılar yalnızca bilgisayar korsanına geri gönderilir, ancak bilgisayar korsanı yeterli istekte bulunursa, sayfanın kötü amaçlı sürümü önbelleğinizde diğer kullanıcılara dağıtılacağı yere gelir.
Bağlantıları ana bilgisayar başlığına göre veritabanında depolarsanız kimlik avı saldırısı olabilir. Örneğin, bir kullanıcının mutlak URL'sini bir forumdaki kullanıcının profillerine depoladığınızı varsayalım. Yanlış bir başlık kullanarak, bir hacker profil bağlantısını tıklayan herkesin kimlik avı sitesi göndermesini sağlayabilir.
Parola sıfırlama zehirlenmesi, bir bilgisayar korsanı farklı bir kullanıcı için parola sıfırlama formunu doldururken kötü amaçlı bir ana bilgisayar üstbilgisi kullanırsa oluşabilir. Bu kullanıcı daha sonra bir kimlik avı sitesine yönlendiren bir şifre sıfırlama bağlantısı içeren bir e-posta alır.
İşte daha kötü niyetli bazı örnekler
Ek Uyarılar ve Notlar:
- Tüm UseCanonicalName kapatılır
$_SERVER['SERVER_NAME']
aynı başlığa sahip doldurulur $_SERVER['HTTP_HOST']
her durumda kullanılan olurdu (artı bağlantı noktası). Bu Apache'nin varsayılan kurulumudur. Siz veya devops bunu açarsa, tamamsınız - ish - ama küçük bir konfigürasyonda küçük bir konfigürasyon gibi görünecek şeyleri korumak için gerçekten ayrı bir ekibe veya gelecekte üç yıla güvenmek istiyor musunuz? -varsayılan değer? Bu her şeyi güvenli hale getirse de, bu düzene güvenmemeye dikkat ediyorum.
- Ancak Redhat, varsayılan olarak [ kaynak ] usecanonical'i açar .
- Eğer Serveralias sanal barındıran girişinde kullanılır ve diğer ad alanı istenir,
$_SERVER['SERVER_NAME']
cari domain döndürmez, ancak sunucuAdı yönergenin değerini döndürecektir.
- ServerName çözümlenemiyorsa, işletim sisteminin ana bilgisayar adı komutu yerine [kaynak] kullanılır .
- Ana bilgisayar başlığı dışarıda bırakılırsa, sunucu usecanonical [kaynak] üzerindeymiş gibi davranacaktır .
- Son olarak, yerel sunucumda bunu kullanmayı denedim ve ana bilgisayar başlığını taklit edemedim. Apache'de bunu ele alan bir güncelleme olup olmadığını veya sadece yanlış bir şey yapıp yapmadığımı bilmiyorum. Ne olursa olsun, bu başlık sanal ana bilgisayarların kullanılmadığı ortamlarda yine de kullanılabilir.
Küçük Rant:
Bu soru, eldeki güvenlik sorunlarından bahsetmeden yüz binlerce görüş aldı! Bu şekilde olmamalı, ancak Yığın Taşması yanıtı popüler olduğu için güvenli olduğu anlamına gelmez.