• Возможно ли подделать переменную $_SERVER?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Я всегда в любых своих проектах использовал данные из массива $_SERVER напрямую.

    Использовать глобальные переменные - плохая практика. С точки зрения безопасности, тестируемости и надежности вашего кода. На счет суперглобальных: один раз при инициализации вашего приложения вытягиваете нужные для вас данные из них, проверяете и вставляете в некий объект Request, это уже данные, которым вы можете доверять, посему изменять их внутри Request нельзя. Посмотрите symfony.com/doc/current/book/http_fundamentals.html

    require_once $_SERVER['DOCUMENT_ROOT'].'/папка/файл.php'

    Так писать по нельзя. От слова "совсем".
    Используйте Composer. Подключение файлов вручную нужно только в точке входа (обычно это index.php). Опять же с точки зрения безопасности.
    Никто вам не гарантирует, что $_SERVER['DOCUMENT_ROOT'] будет правильным, да и то, что будет создан такой элемент - тоже не гарантирует.

    Исходя из этого возникает вопрос. На сколько это оправдано?

    Со всей силы оправдано.

    Но, что мне делать с массивом $_SERVER?

    По возможности - забыть про его существование)). Исключения бывают конечно же, но редко.

    Каким образом он может быть подменен или в него может быть вставлена инъекция?

    $_SERVER['DOCUMENT_ROOT'] = '/dev/null';
    
    require 'path/to/your/file.php';


    Если запустить скрипт из консоли - куча элементов $_SERVER просто не будут созданы, например QUERY_STRING

    Может быть NetBeans прав?

    Прав

    и действительно нужна обработка.

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

    Рекомендую почитать: Попросили проверить код, на что смотреть нужно?
    Ответ написан
    Комментировать
  • Возможно ли подделать переменную $_SERVER?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Для начала, эта переменная никем не отдается. Ее формирует сам php.

    Часть значений этого массива заполняется из пришедших http-заголовков. Как вы понимаете в некоторых заголовках специально можно прислать всё что угодно.
    Ответ написан
    Комментировать