18 октября 2005 г., Сан-Франциско, Zend/PHP конференция.
Докладчиком по данной проблеме был Крис Шифлетт ( Chris Shiflett) – ведущий специалист в области безопасности PHP приложений, один из основателей PHP Security Consortium'а (http://phpsec.org), автор многих книг и статей по PHP, член Zend Advisory Board, один из авторов Zend PHP сертификации, основатель и президент консультационного центра Brain Bulb (brainbulb.com). За свою многолетнюю работу в качестве независимого консультанта в сфере безопасности PHP приложений Крис накопил громаднейший опыт решения проблем безопасности, защиты сайтов от хакерских атак различного типа. Своими мыслями по этому вопросу он и решил поделиться с аудиторией в течение сессии, длившейся более 3-х часов.
В своем выступлении Крис дал полный анализ вопросов безопасности, предложил комплексную схему обеспечения безопасности Web-сайта, подробно остановился на каждом этапе реализации, показывал много примеров готового PHP кода.
В самом начале сессии Крис остановился на основных ключевых принципах обеспечения безопасности, среди которых были указаны следующие: избыточная безопасность, достаточность привилегий для пользователей, простота кода и минимизация внешнего воздействия.
Среди ведущих этапов работ по обеспечению безопасности Крис особо отметил важность фильтрации входных и подготовки выходных данных.
Были продемонстрированы основные задачи фильтрации входных данных, проведен обзор очевидных ($_POST, $_GET, $_COOKIE) и не очевидных источников получения входной информации ($_REQUEST, $_SERVER, $_SESSION), указано на особенности использования каждого из этих массивов.
Крис удачно сравнил важность фильтрации входной информации с фильтрацией воды, которую мы принимаем внутрь, заявив, что без качественной фильтрации результат деятельности PHP-сценария будет схож с результатом потребления человеком воды из непроверенного источника. «Уверен, что никто из вас не станет пить из лужи», - сказал Крис. «Так почему же мы так часто используем недостаточно очищенные данные для наших приложений?» На нескольких примерах PHP кода он убедительно продемонстрировал надежность процесса фильтрации при соблюдении вышеуказанных принципов, дал важные рекомендации, среди которых особо отметил правила по наименованию переменных, как залог четкого разделения не фильтрованных данных от «чистой» информации. Крис также продемонстрировал несколько типовых ходов проведения фильтрации, многие из которых мне показались крайне интересными.
Аналогично Крис осветил вопросы подготовки выходных данных, в зависимости от формата вывода (HTML, RDBMS, XML). Показанные примеры заставили меня пересмотреть свои собственные взгляды на этот процесс, многое из увиденного заставит меня в будущем подходить к этому вопросы с точки зрения Криса, которая мне показалась более логичной, чем те, которые я встречал во многих учебниках по PHP и даже в официальной документации на php.net.
Особое место в выступлении Криса занимал обзор основных хакерских атак на сайты и способов их предотвращения. Подробно были рассмотрены следующие атаки:
- Cross-Site Scripting
- Session Fixation
- Session Hijacking
- Cross-Site Request Forgeries
Особенно мне понравилась последняя, хотя вероятность ее осуществления на какие-либо из моих сайтов ничтожна, однако сама по себе она делается очень красиво!т
В финале Крис остановился на особенностях настройки конфигурации PHP с целью обеспечения максимальной безопасности приложений и сервера.
В целом доклад получился очень удачным и информативным. Я думаю, что мне нет смысла более подробно останавливаться на всех технических подробностях презентации, тем более, что много информации доступно на тех сайтах, которые Крис активно рекомендовал по этому вопросу. Вот список основных источников: