PHP Проверка кода на безопасность

PHP – один из наиболее популярных языков для веб-разработки. В ежегодном отчете GitHub за 2021 г. он по уровню популярности находится на шестом месте, а в индексе TIOBE – на восьмом. Язык используется для создания сайтов и веб-приложений, в том числе и корпоративных. На нем написаны популярные CMS (Joomla, WordPress, Drupal), на которых работает огромное количество веб-ресурсов. К примеру, только на WordPress функционирует около 1/3 сайтов в интернете.

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

Безопасность PHP и анализ исходного кода SAST-инструментами

При разработке анализатора исходного кода Solar appScreener мы делали упор на SAST-анализ (метод белого ящика). Одна из его ключевых особенностей – возможность эксплуатации средств анализа не только разработчиками, но и конечными пользователями программных продуктов и информационных систем, написанных на языке PHP. SAST-анализ безопасности PHP-приложений позволяет организовать регулярное тестирование собственными силами. В нашем продукте результаты тестирования предоставляются в удобном для восприятия виде. Для работы с ними не нужен бэкграунд в разработке. С интерпретацией результатов без проблем справляются специалисты в области информационной безопасности или администраторы корпоративных информационных систем.

При использовании этого метода нет необходимости в развертывании отдельных сред для анализа ПО. Он покрывает практически 100% исходного кода. PHP-анализатор уязвимости, использующий технологию SAST, проверяет не только код самого приложения, но и связанных с ним внешних компонентов, библиотеки фреймворков (Laravel, Yii, Symphony, Zend Framework, FuelPHP и проч.) и так далее.

Типовые проблемы, которые обнаруживаются в PHP при проверке на уязвимости

SAST-анализ безопасности позволяет выявлять большинство типовых проблем, характерных для приложений, написанных на PHP. В программах, написанных на этом языке, встречаются как «универсальные» уязвимости, которые характерные для других языков программирования, так и специфичные, характерные именно для PHP.

Уязвимости, связанные с получением данных

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

Уязвимости могут быть связаны с:

  • вводимыми пользователями данными. Слабые места – контактные и другие типы форм, в которые пользователи вводят информацию. Уязвимости появляются из-за слабой валидации и фильтрации данных;

  • SQL-запросами на запись/ зменение. Довольно частое явление – внедрение SQL-запросов во входных данных таким образом, чтобы они исполнялись в теле основных SQL-запросов. Опять же, реализация связанных с этим обстоятельством угроз становится возможной из-за слабой фильтрации и валидации данных перед выполнением запросов;

  • POST/GET-запросами. Если приложение или сайт их принимает, то требуется надлежащая их обработка. Иначе через POST/GET-запросы могут реализовываться URL-атаки с целью получения доступа к файлам на сервере, внедрение вредоносного кода (например, через svg/onload), а также другие действия.

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

Прямой вызов файлов

При использовании подключения через require() или через автозагрузку классов есть возможность реализации угроз через вызов файлов напрямую из браузера. Если это удается злоумышленникам, им уже ничто не помешает передать в него исполняемый код (вредоносный).

Вероятные угрозы также можно обнаруживать при статическом анализе уязвимостей. Например, анализируя распределение файлов по каталогам или содержимое .htaccess.

Глобальные переменные

Возможность создавать глобальные переменные скрипта через строку запроса – на руку злоумышленникам. Благодаря этому они могут влиять на выполнение скриптов и реализовывать различные уязвимости. Наличие возможности задания глобальных переменных без проблем обнаруживается при статическом анализе кода.

Еще несколько характерных для PHP уязвимостей

При анализе PHP и проведении тестов безопасности следует уделять внимание следующим проблемам/уязвимостям, которые могут появляться в написанных на этом языке приложениях:

  • XSS или межсайтовый скриптинг. При реализации угрозы злоумышленники могут получать конфиденциальные данные, которые хранятся в браузере пользователя. Говорить о вероятном наличии угрозы можно при обнаружении проблем с фильтрацией данных и, в частности, HTML-тегов.

  • Различные виды инъекций: PHP, SQL, e-mail, через загрузку файлов.

  • Пароли доступа к административным страницам. Довольно часто уровню их сложности не уделяется должное внимание. Также пароли могут храниться в открытом доступе без какого-либо шифрования (например, md5). Получив доступ к файлам с этими данными, злоумышленники могут реализовывать угрозы.

Еще один момент, на который часто указывают специалисты по информационной безопасности, – разрешение пользователям вывода/демонстрации информации об ошибках. Но это момент спорный. С одной стороны, данная информация может быть использована злоумышленниками для поиска уязвимых мест, которые они потом эксплуатируют. С другой – отключение демонстрации ошибок создает трудности при обслуживании кода: разработчики и команды поддержки могут пропустить важные ошибки.

Видно, что PHP не лишен недостатков. При его использовании, как и в случае с любым другим языком программирования, могут возникать (и возникают) различные уязвимости. Чтобы держать все под контролем, целесообразно проводить регулярные проверки приложений и сайтов на PHP. Сделать это поможет SAST-анализ программного кода. 

Спасибо!
Ваша заявка принята

В ближайшее время с Вами свяжется наш менеджер

Спасибо!

Теперь вы будете в числе первых получать новости о наших продуктах