$ _SERVER ['REMOTE_ADDR'] 'e güvenmek güvenli mi?


89

Güvenmek güvenli $_SERVER['REMOTE_ADDR']mi? İsteğin başlığını veya buna benzer bir şeyi değiştirerek değiştirilebilir mi?

Böyle bir şey yazmak güvenli mi?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}

3
Mevcut yanıtlara ek olarak, her zaman sunucunuza istekte bulunan IP adresi olacaktır, ancak bu, isteği başlatan bilgisayarın IP adresi olduğu anlamına gelmez. Siz ve son kullanıcı arasında herhangi bir sayıda proxy sunucusu olabilir ve size en yakın olanı aldığınız IP adresidir.
Dan Grossman

evet güvenlidir çünkü başka bir numara veya bazı hile ile altyazı eklenemez. ancak $ grant_all_admin_rights değişkeni için daha fazla kontrol eklediğinizden emin olun.
Yuda Prawira

Herhangi bir $ _SERVER değişkeni sahte olabilir - örneğin curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Yani tamamen bağlama bağlıdır: Saldırgan bir yanıt bekliyorsa, $ ip'e geri dönecektir. Yanıtı umursamazlarsa, kesinlikle başlığı taklit edebilirler. Başlık kontrolünden sonra kodunuz şöyle diyorsa: "open_the_door_to_badguys ();" bir problemin olur.
TMG

3
@TMG $_SERVER['REMOTE_ADDR']Bir HTTP istek başlığı ayarlayarak değişkeni yanıltamazsınız . PHP HTTP_, $_SERVERsüper küreselde anahtarlar oluştururken tüm HTTP istek başlıklarını otomatik olarak ön ekler .
MrWhite

Yanıtlar:


110

Evet, güvenlidir. TCP bağlantısının kaynak IP'sidir ve bir HTTP başlığı değiştirilerek değiştirilemez.

Endişelenmek isteyebileceğiniz bir durum, ters bir proxy'nin arkasındaysanız, bu durumda REMOTE_ADDR her zaman proxy sunucusunun IP'si olur ve kullanıcı IP'si bir HTTP üstbilgisinde ( X-Forwarded-For ). Ancak normal kullanım durumu için REMOTE_ADDR okumak iyidir.


4
IP adresi sahtekarlığı ne olacak?
Abdull

1
@Abdull Bunu yapabilen kişiler genellikle kutunuza fiziksel erişimi olan kişilerdir. bu yüzden bu kadar endişelenme.
Behrooz

5
@Abdull IP spoofing yalnızca tek bir şekilde mesaj gönderebilir, IP'nizi taklit edemez ve karşılığında bir mesaj alamazsınız.

1
İnternet yönlendiricileri, paketleri yönlendirmek için kaynak ve hedef IP'yi kontrol etmiyor mu? Sahte bir paketin internet düğümleri üzerinden hedefe ulaşacağından şüpheliyim.
Viktor Joras

57

$_SERVER['REMOTE_ADDR']TCP bağlantısının geldiği IP adresidir. İnternette IP adreslerini çift yönlü olarak taklit etmek teknik olarak mümkün olsa da (BGP aracılığıyla hatalı rotaları duyurarak), bu tür saldırılar muhtemelen tespit edilebilir ve tipik saldırgan tarafından kullanılamaz - temel olarak, saldırganınız bir İSS veya taşıyıcı üzerinde kontrol sahibi olmalıdır. TCP'ye karşı (henüz) uygun tek yönlü sahtekarlık saldırıları yoktur. Çift yönlü IP sahtekarlığı bir LAN'da önemsizdir.

Ayrıca bunun bir IPv4 değil, IPv6 adresi olabileceğini unutmayın. Şu anki çekiniz bu bakımdan sorun değil, ancak bunun 1.2.3.4yalnızca içinde herhangi$_SERVER['REMOTE_ADDR'] bir yerde gerçekleştiğini kontrol ederseniz , bir saldırgan kolayca bağlantı kurabilir 2001:1234:5678::1.2.3.4.

Özetle, kritik (bankacılık / askeri / potansiyel hasar> 50.000 €) uygulamalar dışındaki herhangi bir şey için, yerel ağınızdaki saldırganları dışlayabiliyorsanız uzak IP adresini kullanabilirsiniz.


4
İnternet Protokolü hakkında oldukça bilgili görünüyorsun.
Brian Peterson

@phihag, $_SERVER['REMOTE_ADDR']TCP bağlantısının geldiği IP adresinin olup olmadığı tamamen SAPI'nıza bağlıdır.
Pacerier

WEP / WPA WLAN'daki bir saldırganın gerçek istemciyi atması ve bu ip adresini taklit etmesi olanaksız olmaktan çok uzaktır - hem WEP hem de WPA yanıltma you have been kicked off the wlanpaketlerinin doğru araçlarla oluşturulmasını kolaylaştıran zayıf yönlere sahiptir . google WPA downgrade test, örneğin
hanshenrik

IP adresi, TCP seviyesi değil IP seviyesidir.
Viktor Joras

3

Yukarıda belirtildiği gibi, kesinlikle güvenli değil. Ama bu, onu kullanmaman gerektiği anlamına gelmez. Bunu, örneğin COOKIE değerlerini kontrol etmek gibi diğer kimlik doğrulama yöntemleriyle birleştirmeyi düşünün.


7
Bir IP adresi sahtekarlığı yaptıktan sonra, http talebini değiştirmek ve yanlış tanımlama bilgileri göndermek çocuk oyuncağı ..... (veya bir parça tanımlama bilgisi)
Uri Goren

1
Lütfen "kesinlikle güvenli değil" ile ne demek istediğinizi açıklayın
Jake
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.