Безопасность: инъекция массива $_SERVER в PHP
Я написал функцию PHP, которая записывает все в $_SERVER
массив и, если есть определенный $_SERVER
переменная, которая не существует в моей базе данных, он добавит этот столбец.
Мой вопрос таков: насколько безопасен этот звук для вас? После исследования и понимания информации заголовка возникают некоторые вопросы.
- Сможет ли клиент изменить определенные переменные, отправленные на сервер их агентом браузера или ОС?
- Может ли кто-то, кто будет размещать сайт со своего собственного сервера, иметь возможность вставлять код в свой собственный
$_SERVER
массив?
В целом, я просто спрашиваю, насколько точно это звучит, но это были первые проблемы, которые приходят на ум.
Если вы обнаружите, что что-то не так с тем, как я задал этот вопрос, пожалуйста, прокомментируйте, прежде чем вы проголосуете, и я немедленно его изменю.
2 ответа
$_SERVER
нельзя доверять. $_SERVER['HTTP_USER_AGENT']
содержит строку, которая легко настраивается пользователем - возможна инъекция SQL. Для этого есть даже браузерные плагины. На самом деле, есть много $_SERVER
переменные, которые могут быть изменены пользователем, например, также $_SERVER['HTTP_ACCEPT_LANGUAGE']
,
Взгляните на плагин Chrome ModHeader:
Переменная $_SERVER используется PHP для возврата информации о серверной информации, это не место для хранения данных. Честно говоря, впервые слышу, что кто-то хочет использовать $_SERVER superglobal для хранения данных. Может быть, вы должны использовать $_SESSION? Я думаю, что это правильный способ хранения данных, если база данных не вариант...
Также массив $_SERVER, похоже, обновляется каждый раз, когда вы перезагружаете страницу. И на что @ByteHamster указал, что некоторые значения в переменной $_SERVER могут быть подделаны.
Дело в том, что вы пытаетесь использовать то, что не предназначено для этой цели...