PHPSECURE — начало

В далеком уже 2005 году, я впервые столкнулся со взломом сайта одного из клиентов. Это произошло потому, что я начал работать в области хостинговых услуг. С тех пор, не проходило и месяца без очередного взлома, очередной устаревшей версии CMS или наоборот — «обновленной» CMS.

В общем взломы были, есть и будут.

Шли годы, увеличивалась клиентская база, рос и я, как программист и системный администратор. А так же росло количество взломов, особенно, после публикации очередной уязвимости в одной из популярных CMS…

Появлялись клиенты, которых взламывали регулярно. Как это происходило:
Клиента взломают, начинают с его аккаунта рассылать спам или пытаться кого-то ддосить/брутить и т.п. Приходит абуза из датацентра, либо системы мониторинга успевают сообщить об аномальном поведении аккаунта до абуз, не суть важно…
Важно то, что после этого начиналась работа с клиентом. В итоге, работа сводилась к тому, что мне приходилось вручную вычищать сайты клиента от вредоносного кода и просить клиента обновить CMS, сменить пароли и т.п.
Одни обновляли, другие нет… Некоторых, ломали с завидной регулярностью и число таких «счастливчиков» расло.

Однажды возникла мысль — а вот бы запретить запуск всех вредоносных скриптов, чтобы даже если их загрузят, не могли ими воспользоваться…

Работы, самой разной, было много, но мысль прочно отложилась в голове, хотя и пылилась на дальней полке.

Лишь к концу 2013 года, после многократной чистки сайтов очередного «счастливчика», я принял решение «что-то с этим сделать».

Итак, задача — запретить запуск вредоносных скриптов.
Причем, скрипты могут иметь разные имена и содержимое. Несложно придти к выводу, что проще всего создать список безопасных скриптов на сайте и запретить запуск всего остального.

А что, если взломщик не будет загружать свой скрипт, а просто изменит содержимое одного из уже существующих? Так возникла вторая задача — контролировать и сверять содержимое скриптов, запуск которых разрешен.

А зачем загружать, когда можно выполнить SQL-инъекцию или произвольный код? Вот здесь я призадумался, но не надолго — ведь 99% данных попадают к скриптам посредством передачи в запросах (GET, POST и т.д.), так почему бы не отфильтровать в запросах все, что потенциально опасно?

В общем, мысли на эту тему копились, сайты продолжали взламываться и в январе 2014 года я сел за разработку PHPSECURE.