Безопасность: инъекция массива $_SERVER в PHP

Я написал функцию PHP, которая записывает все в $_SERVER массив и, если есть определенный $_SERVER переменная, которая не существует в моей базе данных, он добавит этот столбец.

Мой вопрос таков: насколько безопасен этот звук для вас? После исследования и понимания информации заголовка возникают некоторые вопросы.

  1. Сможет ли клиент изменить определенные переменные, отправленные на сервер их агентом браузера или ОС?
  2. Может ли кто-то, кто будет размещать сайт со своего собственного сервера, иметь возможность вставлять код в свой собственный $_SERVER массив?

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

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

2 ответа

Решение

$_SERVER нельзя доверять. $_SERVER['HTTP_USER_AGENT'] содержит строку, которая легко настраивается пользователем - возможна инъекция SQL. Для этого есть даже браузерные плагины. На самом деле, есть много $_SERVER переменные, которые могут быть изменены пользователем, например, также $_SERVER['HTTP_ACCEPT_LANGUAGE'],

Взгляните на плагин Chrome ModHeader:

Переменная $_SERVER используется PHP для возврата информации о серверной информации, это не место для хранения данных. Честно говоря, впервые слышу, что кто-то хочет использовать $_SERVER superglobal для хранения данных. Может быть, вы должны использовать $_SESSION? Я думаю, что это правильный способ хранения данных, если база данных не вариант...

Также массив $_SERVER, похоже, обновляется каждый раз, когда вы перезагружаете страницу. И на что @ByteHamster указал, что некоторые значения в переменной $_SERVER могут быть подделаны.

Дело в том, что вы пытаетесь использовать то, что не предназначено для этой цели...

Другие вопросы по тегам