2013-07-14 6 views
0

Я читал несколько раз, что получение IP-адреса от клиента с использованием $ _SERVER ['REMOTE_ADDR'] безопасно, потому что он НЕ МОЖЕТ быть изменен пользователем напрямую (только с помощью прокси-серверов и т. Д.), Но он всегда возвращает IP-адрес. До сегодняшнего дня я получил сообщение об ошибке с моего сайта о том, что ошибка mysql возникла в запросе, который проверяет, запрещен ли IP-адрес.

Raw запрос выглядит следующим образом:

SELECT * FROM `bans` WHERE `ip`='{$ip}' 

и получить IP осуществляется с помощью

$ip = $_SERVER['REMOTE_ADDR'] 

Я не делал никакой дезинфекции на $ IP, потому что я предполагаю, что это не может быть изменен пользователем ... И я получил письмо, что не удалось этот запрос:

SELECT * FROM `bans` WHERE `ip`='1'"+order+by+1--+, 111.222.111.222' 

(Примечание: Я поставил 111.222.111.222 вместо нападавших фактический IP)

Мой электронный сценарий также принимает IP с помощью $ _SERVER [ «REMOTE_ADDR»], так что я получил, что «фальшивый» IP там тоже:

IP: 1'"+order+by+1--+, 111.222.111.222 

Его легко дезинфицировать, когда вы знаете, что его можно изменить, но я хочу знать, как это возможно?

+0

Вы проверили связанные вопросы? – Rainulf

+0

можете ли вы отслеживать этот запрос в журналах доступа к серверу? Что такое IP-адрес? –

+0

Я могу, IP нормально в журналах - 111.222.111.222 - - [14/Июль/2013: 00: 04: 11 +0200] "POST /somefile.php HTTP/1.0" 200 561 "http: // www. site.com/some_other_file.php "" Mozilla/5.0 (Windows NT 6.1; rv: 21.0) Gecko/20100101 – Turshija

ответ

0

Нет, это невозможно подделать.

В коде есть две ошибки.

  1. Вы дезинфицировать вещи, с помощью мышления если переменная является «безопасным» или нет. В то время как вы должны формат ваш литерал SQL, оставив это бремя мышления в подготовленном заявлении .
  2. У вас есть скомпрометированный способ получения $ ip. Либо $ip, либо $_SERVER['REMOTE_ADDR'] заполнены небезопасным способом. Здесь вы можете найти много ответов на SO, чтобы помочь вам.
+0

1. Я знаю, как дезинфицировать переменные и использовать подготовленные заявления, это не мой вопрос. Отсутствие подготовленных заявлений в этом проекте связано с некоторыми другими причинами, которые не имеют отношения к делу. 2. Как можно скомпрометировать IP? Одна строка над запросом - $ ip = $ _ SERVER ['REMOTE_ADDR'], между ними нет ни одной строки, которая могла бы взломать их. – Turshija

+1

О, к сожалению, нет. –

Смежные вопросы