Сергей Яремчук
Сегодня PHP – один из самых популярных языков, используемых при
разработке веб-приложений. Простота в изучении и использовании привлекает к
нему новичков.
Принято считать, что ошибки при программировании свойственны только
новичкам, которые многого еще не умеют и не знают, но это не так. Программист с
опытом способен избежать большинства проблем, но в то же время он также не
застрахован от ошибок. Кроме того, многие сайты сегодня делаются под заказ специалистами-аутсорсерами
и не всегда исполнитель может, умеет и хочет провести полноценный аудит
собственного кода. Крупные проекты также содержат ошибки. Результат – сегодня
только и слышно о PHP Include, SQL Injection, Cross site scripting (XSS) и
других атаках, направленных на веб-сервисы. Несмотря на то что об этих
технологиях и методах защиты рассказано многое, взломы все равно продолжаются.
Так, по статистике Web Application Security Consortium
[1] количество взломов веб-серверов в 2005 году по сравнению с 2004 годом
увеличилось в три раза. Это, конечно, не самая точная и полная статистика, зато
в ней фигурируют только крупные проекты, защитой которых занимаются отнюдь не
новички. Среди основных причин такой негативной тенденции называют широкую доступность
инструментов, необходимых для проведения атаки, и недостаточное внимание со
стороны разработчиков сайтов к вопросам безопасности.
Выходов из этой ситуации может быть несколько.
Это и аудит кода, заказанный у сторонней организации, автоматическое тестирование
с помощью специализированных сканеров безопасности, работающих на прикладном
уровне, вроде Acunetix Web Vulnerability Scanner [2] и правильная настройка
всех компонентов системы (веб-сервера, параметров PHP и базы данных). Ручная
проверка больших объемов кода является сложной и трудоемкой задачей, требующей
больших знаний в различных областях, займет много времени и 100% гарантии все
равно не даст. Сканеры безопасности, как правило, позволяют выявить лишь общие
ошибки. Вероятно, поэтому в последнее время активно развиваются проекты,
позволяющие защититься от атак глобально, независимо от присутствия ошибок на
сайте. Один из вариантов – защита сервиса с помощью файервола веб-приложений
[3], разработчики Suhosin пошли несколько иным путем.