$_SERVER['HTTP_HOST']
Bir sitedeki tüm bağlantılar için, XSS saldırıları hakkında endişelenmenize gerek kalmadan, formlarda kullanıldığında "güvenli" midir?
Evet, kabul etmeden önce doğruladığınız sürece kullanmak güvenlidir$_SERVER['HTTP_HOST']
(ve hatta $_GET
ve $_POST
) . Güvenli üretim sunucuları için yaptığım şey:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
$reject_request = true;
if(array_key_exists('HTTP_HOST', $_SERVER)){
$host_name = $_SERVER['HTTP_HOST'];
// [ need to cater for `host:port` since some "buggy" SAPI(s) have been known to return the port too, see http://goo.gl/bFrbCO
$strpos = strpos($host_name, ':');
if($strpos !== false){
$host_name = substr($host_name, $strpos);
}
// ]
// [ for dynamic verification, replace this chunk with db/file/curl queries
$reject_request = !array_key_exists($host_name, array(
'a.com' => null,
'a.a.com' => null,
'b.com' => null,
'b.b.com' => null
));
// ]
}
if($reject_request){
// log errors
// display errors (optional)
exit;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
echo 'Hello World!';
// ...
Avantajı $_SERVER['HTTP_HOST']
, davranışının daha iyi tanımlanmış olmasıdır $_SERVER['SERVER_NAME']
. Kontrast ➫➫ :
Ana Makinenin İçeriği: varsa, geçerli istekten başlık.
ile:
Geçerli komut dosyasının altında çalıştığı sunucu ana bilgisayarının adı.
Daha iyi tanımlanmış bir arayüz kullanmak, daha $_SERVER['HTTP_HOST']
fazla SAPI'nin güvenilir ve iyi tanımlanmış davranış kullanarak onu uygulayacağı anlamına gelir . (Farklı diğer .) Bununla birlikte, yine de bağımlı tamamen SAPI ➫➫ :
Her web sunucusunun bu [ $_SERVER
girişlerden] herhangi birini sağlayacağının garantisi yoktur ; sunucular bazılarını atlayabilir veya burada listelenmeyen başkalarını sağlayabilir.
Ana bilgisayar adının doğru bir şekilde nasıl alınacağını anlamak için, öncelikle ve en önemlisi, yalnızca kod içeren bir sunucunun ağdaki kendi adını bilmenin (doğrulamak için ön koşul) olmadığını anlamanız gerekir . Kendi adını sağlayan bir bileşenle arayüz kurması gerekir. Bu şu şekilde yapılabilir:
Genellikle yerel (SAPI) yapılandırma dosyası üzerinden yapılır. Düzgün yapılandırdığınıza dikkat edin, örneğin Apache ➫➫ :
Dinamik sanal ana makinenin normal gibi görünmesi için birkaç şeyin 'sahte' olması gerekir.
En önemlisi, Apache tarafından kendinden referanslı URL'ler vb. Oluşturmak için kullanılan sunucu adıdır. ServerName
Yönerge ile yapılandırılır ve SERVER_NAME
ortam değişkeni aracılığıyla CGI'lar tarafından kullanılabilir .
Çalışma zamanında kullanılan gerçek değer UseCanonicalName ayarı tarafından kontrol edilir .
UseCanonicalName Off
Sunucu adı ileHost:
istekte başlık içeriğinden gelir . Bununla UseCanonicalName DNS
birlikte, sanal ana bilgisayarın IP adresinin ters DNS aramasından gelir. İlk ayar, ad tabanlı dinamik sanal barındırma için kullanılırken, ikinci ayar ** IP tabanlı barındırma için kullanılır.
Eğer hiçbir olmadığından Apache sunucusunun ismini çalışamaz Host:
başlık veya başarısız arama DNS sonra yapılandırılmış değeri ServerName
yerine kullanılır.