Я создаю веб-приложение, и я беспокоюсь о безопасности.
Это способ сделать «инъекцию php», таким же образом можно сделать «SQL-инъекцию»? Это означает, что клиент может отправить код php, который будет выполняться на сервере.
Пока мы не будем использовать функцию eval, я бы хотел сказать «нет», потому что, когда мы получаем значение от $ _GET и $ _POST, все данные обрабатываются как простая строка … Но, возможно, я не видеть очевидную атаку.
В общем случае, если вы не оцениваете его с помощью чего-то, что может анализировать и выполнять PHP. Вы уже упоминали eval, но есть и другие функции, обладающие eval-подобными свойствами (например, preg_replace
, если злоумышленнику удается внедрить модификатор /e
) или в противном случае разрешить нежелательные уровни доступа (например, system()
).
Кроме того, если злоумышленник может загрузить файл и заставить его интерпретироваться как PHP, он может запустить PHP-код. nginx может быть легко неверно сконфигурирован таким образом, чтобы злоумышленники могли выполнять PHP-код в файлах изображений. То же самое относится к тому, чтобы ваш веб-сайт include()
его код – возможно, перезаписав ваши файлы с помощью своих загрузок или изменив аргументы include()
чтобы указать на удаленный сайт (если это не отключено в php.ini).
Есть несколько способов, которыми вы могли бы, возможно, иметь «инъекцию PHP». eval
– один из них. shell_exec
и связанные с ним функции тоже представляют собой риск (всегда используйте escapeshellarg
!). Но общая тема заключается в том, что пользовательский ввод может быть где-то выполнен. Это относится к SQL-инъекциям, где запрос представляет собой строку, содержащую пользовательский ввод, и затем выполняется на сервере MySQL.
Одним из немногих неясных примеров является загрузка файлов. Если вы разрешаете загружать файлы на свой сервер, НЕ разрешайте неограниченный доступ к ним! Кто-то может загрузить файл PHP, затем получить доступ к нему и получить полный контроль над вашим сайтом, поэтому … да, будьте осторожны с загрузками!
Вы бы назвали это PHP-инъекцией, если PHP-скрипт «конструирует весь или часть сегмента кода, используя внешний входной сигнал от восходящего компонента, но он не нейтрализует или неправильно нейтрализует специальные элементы, которые могут изменять синтаксис или поведение предполагаемого кода сегмент " [1] .
Таким образом, для PHP как процессора любая функция, параметр которой интерпретируется как PHP, прямо или косвенно, может быть подвержена инъекции PHP. Это включает в себя, очевидно, функцию eval
, но также функции, такие как create_function
и preg_replace
с модификатором PREG_REPLACE_EVAL .
Кроме того, это также включает в себя процедуры, которые генерируют PHP-код для записи в файл, такой как файлы конфигурации во время установки приложения. Или подпрограммы, выполняющие PHP через php -r …
, даже если сбежать через escapeshellarg
.
Взгляните на наблюдаемые примеры для CWE-94: неправильный контроль генерации кода («инъекция кода») .