Чи безпечно довіряти $ _SERVER ['REMOTE_ADDR']?


89

Чи безпечно довіряти $_SERVER['REMOTE_ADDR']? Чи можна його замінити, змінивши заголовок запиту чи щось подібне?

Чи безпечно написати щось подібне?

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

3
Додаючи до існуючих відповідей, це завжди буде IP-адреса, яка направила запит на ваш сервер, але це не означає, що це IP-адреса комп’ютера, який розпочав запит. Будь-яка кількість проксі-серверів може бути між вами та кінцевим користувачем, і найближчим до вас є отримана вами IP-адреса.
Dan Grossman

так, це безпечно, тому що це неможливо замінити іншими хитрощами чи якимись обманами. але обов’язково додайте ще перевірку на зміну $ grant_all_admin_rights.
Юда Правіра,

Будь-яку змінну $ _SERVER можна підробити - наприклад, curl_setopt ($ ch, CURLOPT_HTTPHEADER, масив ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Отже, це повністю залежить від контексту: якщо зловмисник очікує відповіді, він повернеться до $ ip. Якщо їх не хвилює відповідь, вони, безумовно, можуть підробити заголовок. Якщо ваш код після перевірки заголовка замість цього сказав: "open_the_door_to_badguys ();" у вас би була проблема.
TMG

3
@TMG Ви не можете підробляти $_SERVER['REMOTE_ADDR']змінну, встановлюючи заголовок HTTP-запиту. PHP автоматично HTTP_створює префікси всіх заголовків запитів HTTP при створенні ключів у $_SERVERсуперглобалі.
MrWhite

Відповіді:


110

Так, це безпечно. Це вихідна IP-адреса з'єднання TCP і не може бути замінена зміною заголовка HTTP.

Одним випадком, з якого ви можете хвилюватися, є те, що ви стоїте за зворотним проксі-сервером, і в цьому випадку REMOTE_ADDR завжди буде IP-адресою проксі-сервера, а IP-адреса користувача буде вказана в заголовку HTTP (наприклад, X-Forwarded-For ). Але для звичайного випадку читання REMOTE_ADDR це нормально.


4
А як щодо підробки IP-адрес?
Абдулл

1
@Abdull Люди, які можуть це зробити, як правило, ті самі люди, які мають фізичний доступ до вашої скриньки. так що не турбуйтеся про це так сильно.
Behrooz

5
@Abdull IP-підробка може надсилати повідомлення лише в один бік, ви не можете підробляти свій IP і отримувати повідомлення у відповідь.

1
Хіба інтернет-маршрутизатори не перевіряють джерело та кінцевий IP для маршрутизації пакетів? Я сумніваюся, що підроблений пакет коли-небудь дійде до місця призначення через інтернет-вузли.
Віктор Йорас

57

$_SERVER['REMOTE_ADDR']- це IP-адреса, на яку надійшло з'єднання TCP. Хоча технічно можливо двонаправлено підробляти IP-адреси в Інтернеті (повідомляючи про неправомірні маршрути через BGP), такі атаки, швидше за все, будуть помічені і недоступні типовому зловмиснику - в основному, ваш зловмисник повинен контролювати провайдера або оператора. Жодних можливих односпрямованих атак підміни проти TCP (поки що). Двонаправлене підмінювання IP-даних є тривіальним у локальній мережі.

Також пам’ятайте, що це може бути не IPv4, а адреса IPv6. Ваша поточна перевірка в цьому плані чудова, але якщо ви перевірите, що 1.2.3.4відбувається лише де-небудь усередині $_SERVER['REMOTE_ADDR'], зловмисник може просто підключитися з 2001:1234:5678::1.2.3.4.

Таким чином, для будь-чого іншого, крім критичних (банківські / військові / потенційні збитки> 50 000 €), ви можете використовувати віддалену IP-адресу, якщо ви можете виключити зловмисників у вашій локальній мережі.


4
Ви здаєтесь дуже поінформованим про Інтернет-протокол.
Брайан Петерсон

@phihag, Чи $_SERVER['REMOTE_ADDR']залежить IP-адреса, за якою було встановлено TCP-з'єднання, повністю залежить від вашого SAPI.
Pacerier

це далеко не неминуче для зловмисника на WEP / WPA WLAN, щоб запустити реального клієнта, і підробити цю ip-адресу - і WEP, і WPA мають слабкі сторони, що дозволяє you have been kicked off the wlanлегко створювати підроблені пакети за допомогою відповідних інструментів. google WPA downgrade test, наприклад
hanshenrik

IP-адреса - рівень IP, а не рівень TCP.
Віктор Йорас

3

Як зазначалося вище, це не зовсім безпечно. Але це не означає, що ви не повинні ним користуватися. Розгляньте можливість поєднати це з деякими іншими методами автентифікації, наприклад, перевірити значення COOKIE.


6
Після підробки IP-адреси, зміни запиту http і надсилання помилкових файлів cookie - це шматочок ..... (або шматочок cookie)
Урі Горен

1
Поясніть, будь ласка, що ви маєте на увазі під словом "не абсолютно безпечно"
Джейк,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.