$_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
"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.
Non-senkronize statik yöntemler parçac...
CSS değişkenleri olarak tanımlamak ren...
Gaussian Rastgele Değişkenleri...
Std::bu gerçekten güvenli mi?...
Raylar Komisyon: bir görev için bağıms...