подмена массива $_SERVER

Kirill

Новичок
подмена массива $_SERVER

Можно ли (хотя бы теоретически) подменить данные в этом массиве(соседи по хостингу/бага в ПО сервера)?
У меня некоторые переменные без проверки оттуда в sql запросы вставляются...
 

SelenIT

IT-лунатик :)
1) Чем вызваны такие опасения?
2) Почему нет уверенности в своих запросах?
3) Что мешает проверить данные?
 

Kirill

Новичок
1) мало ли
3) Вопрос скорее философский. Нужно ли их проверять, если они на 100% корректные?
Поэтому и спрашиваю.
 

Kirill

Новичок
2) потому что серверные переменные(или части) подставляются в элементарные запросы, а учитывая возможности последних версий mysql - можно получить инъекцию. Просто неуверен и все, поэтому и хочу узнать, возможно это или нет. Чтобы спать спокойно :)
 

Фанат

oncle terrible
Команда форума
если речь идёт именно о составлении sql запросов, то проверять не нужно вообще никакие данные. ни из сервера, ни из реквеста. поскольку для вставки проверять там нечего.

Отсюда следует вывод, что вопрос про подмену массива сервер в данном контексте - просто бессмысленный. как и любые ответы на него.
 

Kirill

Новичок
речь идет именно о подставлении. В частности для определения языка подставляется его альяс.
 

Фанат

oncle terrible
Команда форума
кто такой этот ильяс, я не знаю, но раз речь идёт именно о подставлении, то я позволю себе повторить свой тезис: проверять массив сервер не нужно, поскольку никакие проверки не нужны вовсе.

Вопрос исчерпан?
 

Фанат

oncle terrible
Команда форума
отлично.
для закрепления материала, и чтобы больше таких вопросов не возникало, прочитай хрестоматию: PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.

и попробуй найти там хоть одну _проверку_. В том смысле, в котором это слово имеет значение в русском языке.
 

Kirill

Новичок
тема не в проверке, а то, могут ли данные в массиве $_SERVER быть подменены. Если они могут быть подменены, то это уже моё дело как поступать - проверять или добавлять слеши.
 

Фанат

oncle terrible
Команда форума
тема не в проверке, а то, могут ли данные в массиве $_SERVER быть подменены
приведи осмысленный пример того, когда тебе действительно понадобится это знать.
пример с SQL запросом - бессмымсленный.
это уже моё дело как поступать - проверять или добавлять слеши
это заблуждение.
и чем быстрее ты от него избавишься - тем лучше.
для начала прочти текст по ссылке. Только внимательно. потому что второй раз просить я не буду.
 

С.

Продвинутый новичок
Автор оригинала: Kirill
тема не в проверке, а то, могут ли данные в массиве $_SERVER быть подменены. Если они могут быть подменены, то это уже моё дело как поступать - проверять или добавлять слеши.
Что значит "подменены"? Если я например тебе в поле HTTP_USER_AGENT шлю иньекцию, то никто ничего не "подменяет", она там изначально будет стоять.
 

Gorynych

Посетитель PHP-Клуба
Фанат
приведи осмысленный пример того, когда тебе действительно понадобится это знать
о, давай я тебе приведу, не в плане SQL-вопросов.

пример: пишем функцию для преобразования URL'а к абсолютному виду (реально важно при подстановке в тот же header() для перенаправления). Логично, если у нас относительный URL, использовать связку

PHP:
$protocol = preg_replace( "/([^\/]+)\/(.*)/", "\\1", $_SERVER["SERVER_PROTOCOL"] );
$root = strtolower( $protocol )."://".$_SERVER["SERVER_NAME"];
отсюда, например, закономерен вопрос - будет ли $_SERVER['SERVER_NAME'] всегда корректным и не получим ли мы в нем имя чужого сервера?
 

Фанат

oncle terrible
Команда форума
это ошибка
при подстановке в тот же header() для перенаправления надо писать не SERVER_NAME, а HTTP_HOST
 

Gorynych

Посетитель PHP-Клуба
Фанат
не помню уже, но на каком-то сервере HTTP_HOST упорно делал вид, что неопределен. Но суть не в этом, а в том, что и то и другое - в массиве $_SERVER
 

Фанат

oncle terrible
Команда форума
Не может такого быть.
Если клиент придёт без этгого заголовка, то в 99% случаев он просто до тебя не дойдёт. это раз.
о случаях, чтобы апач его задавил и пыху не передал - я никогда не слышал. это два.
если сервер нейм - site.ru, а юзер пришёл на www.site.ru - что будет с его авторизацией? это три.
 
Сверху