SORU
24 HAZİRAN 2011, Cuma


$_SERVER değişkenleri güvenli mi?hangi

Bir kullanıcı denetimi için herhangi bir değişken, saldırgan, kontrol edebilir ve bu nedenle bir saldırı kaynağıdır. Bu "değişken ve güvensiz." kusurlu denir.

Kontrol edilebilir birçok $_SERVER, kullanırken. *, , *, *4HTTP_USER_AGENT*3PHP_SELF ve diğerleri HTTP isteği başlık istemci tarafından gönderilen bir parçasıdır.

Herkes biliyor a "liste veya $_SERVER değişkenlerin listesi lekesiz"? güvenli mi

CEVAP
25 HAZİRAN 2011, CUMARTESİ


"Güvenli" ya da "güvensiz" gibi değerler. diye bir şey yok Kullanıcı kontrolleri sunucu kontrolleri ve değerleri değerleri vardır ve belli bir amaç için güvenilir olup olmadığını bir değeri ve dolayısıyla geldiğini bilmeniz gerekir. Örneğin $_SERVER['HTTP_FOOBAR'] bir veritabanında depolamak için tamamen güvenli olduğunu, ama kesinlikle 7 ** olmazdı.

Gibi, hadi üç kategori içine bu değerleri ayırmak için:

Server kontrollü

Bu değişkenler sunucu çevre tarafından belirlenir ve tamamen sunucu yapılandırmasına bağlıdır.

  • 'GATEWAY_INTERFACE'
  • 'SERVER_ADDR'
  • 'SERVER_SOFTWARE'
  • 'DOCUMENT_ROOT'
  • 'SERVER_ADMIN'
  • 'SERVER_SIGNATURE'

Kısmen kontrol sunucusu

Bu değişkenlere bağlıdır özel istek müşteri gönderdi, ama sadece sınırlı sayıda geçerli değerler, bu yana tüm geçersiz değerler olmalı reddetti tarafından web server ve neden bu çağırma komut ile başlar. Dolayısıyla kabul edilebilirgüvenilir.

  • 'HTTPS'
  • 'REQUEST_TIME'
  • 'REMOTE_ADDR' *
  • 'REMOTE_HOST' *
  • 'REMOTE_PORT' *
  • 'SERVER_PROTOCOL'
  • 'HTTP_HOST'
  • 'SERVER_NAME'
  • 'SCRIPT_FILENAME'
  • 'SERVER_PORT'
  • 'SCRIPT_NAME'

* REMOTE_ değerleri TCP/IP bir el sıkışma tarafından doğrulanmış istemci, geçerli bir adres olduğu garanti edilir. Bu herhangi bir yanıt için gönderileceği Adres. REMOTE_HOST ters DNS aramalarını olsa kullanır ve bu nedenle sunucunuz bu durumda daha büyük sorunları zaten var () karşı DNS saldırıları tarafından sahte olabilir. Bu değer TCP/IP protokolünü basit bir gerçeklik ve hakkında bir şey yapamazsın bir proxy olabilir.

Eğer web sunucusu yanıt verirse†herhangi birHOST istek başlığı ne olursa olsun, bu güvensiz olarak kabul edilmelidir. How safe is $_SERVER[“HTTP_HOST”]? bkz.
Ayrıca bakınız http://shiflett.org/blog/2006/mar/server-name-versus-http-host.

https://bugs.php.net/bug.php?id=64457, http://httpd.apache.org/docs/current/mod/core.html#usecanonicalphysicalport, http://httpd.apache.org/docs/2.4/mod/core.html#comment_999 bakın

Tamamen kullanıcı kontrollü rasgele değerler

Bu değerlerin kontrol etti ve herhangi bir sunucu yapılandırma bağlı olmayan, tamamen keyfi bir bilgi istemci tarafından gönderilir.

  • 'argv', 'argc' (çağırma, genellikle web sunucuları için bir endişe CLİ için geçerlidir)
  • 'REQUEST_METHOD' §
  • 'QUERY_STRING'
  • 'HTTP_ACCEPT'
  • 'HTTP_ACCEPT_CHARSET'
  • 'HTTP_ACCEPT_ENCODING'
  • 'HTTP_ACCEPT_LANGUAGE'
  • 'HTTP_CONNECTION'
  • 'HTTP_REFERER'
  • 'HTTP_USER_AGENT'
  • 'AUTH_TYPE' sunumudur
  • 'PHP_AUTH_DIGEST' sunumudur
  • 'PHP_AUTH_USER' sunumudur
  • 'PHP_AUTH_PW' sunumudur
  • 'PATH_INFO'
  • 'ORIG_PATH_INFO'
  • 'REQUEST_URI' (bozuk veri içeriyor olabilir)
  • 'PHP_SELF' (bozuk veri içeriyor olabilir)
  • 'PATH_TRANSLATED'
  • 'HTTP_' başka bir değer

§ Düşünülebilirgüvenilirsürece web sunucusu sadece belirli bir istek yöntemleri sağlar.

"Nun" olarak kabul edilebilirgüvenilireğer kimlik doğrulaması tamamen web sunucusu tarafından işlenir.

49* *superglobal ayrıca, bazı ortam değişkenleri içerir. Bunlar "güvenli" ya da değil (ve nerede) nasıl tanımlanır bağlıdır. Tamamen server tamamen kullanıcı kontrollü, denetimli arasında olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • ThisWeekYT

    ThisWeekYT

    14 Mart 2013