Безопасность
Глава 4. Безопасность
- Содержание
- Обзор
- Двоичный CGI
- Apache-модуль
- Безопасность файловой системы
- Безопасность баз данных
- Сообщение об ошибке
- Использование Register_Globals
- Данные, отправляемые пользователем
- Скрытие PHP
- Оставаться на уровне
PHP это мощный язык и интерпретатор, подключён ли он к web-серверу как модуль или запускается как отдельный двоичный CGI. Он способен выполнять доступ к файлам, исполнять команды и открывать сетевые соединения на сервере. Эти свойства делают всё запускаемое на web-сервере небезопасным по умолчанию. PHP разработан специально как более безопасный язык для написания CGI-программ, чем языки Perl или C, с корректным выбором опций конфигурации времени компиляции и времени выполнения, удобным кодированием, что даёт вам сочетание свободы и необходимой защищённости.
Поскольку имеется много способов использования PHP, имеются и множество опций конфигурации, управляющих его поведением. Большое количество опций гарантирует, что вы можете использовать PHP для различных целей, но это также означает, что имеются комбинации этих опций и конфигураций серверов, которые дают незащищённую инсталяцию.
Гибкость конфигурации PHP эквивалентна гибкости кода. PHP можно использовать для построения законченных серверных приложений со всеми возможностями пользователя оболочки/shell, или использовать его для простых серверных включений с минимальным риском в жёстко контролируемой среде. То, как вы выстроите окружение и насколько безопасной оно будет, в большой степени зависит от PHP-разработчика.
Эта глава начинается с общего рассмотрения проблем обеспечения безопасности, различных комбинаций опций конфигурации и ситуаций, когда они могут безопасно использоваться. Также даётся описание кодирования для различных уровней безопасности.
Обзор
Абсолютно безопасных систем не существует, поэтому используется некий баланс риска и удобства использования. Если каждая переменная, отправляемая пользователем, требует двух форм биометрической проверки (такой как сканирование сетчатки глаза и отпечатки пальцев), вы получите предельно высокий уровень безопасности. Заполнение очень сложной формы займёт полчаса, что побудит пользователей находить способы обойти защиту.
Достаточный уровень защиты обеспечивает соответствие требованиям безопасности без ухудшения условий работы пользователя или излишнего усложнения работы автора-кодировщика. Вместе с тем, некоторые атаки могут использовать этот стиль обеспечения защиты, что приводит к её постепенному ослаблению.
Обычно плохо помнят фразу: надёжность системы определяется её самым слабым звеном. Если все транзакции основательно защищены на основе логинга по времени, размещению, типу транзакции etc., но пользователь проверяется только по единственной куке, надёжность связки пользователя и log'а транзакций будет серьёзно нарушена.
При выполнении тестирования помните, что не сможете проверить все варианты, даже для простейшей страницы. Вывод, который вы ожидаете, может совсем не соответствовать тому, что увидит недовольный служащий, кракер с многолетним стажем или домашний кот, гуляющий по клавиатуре компьютера. Поэтому лучше смотреть на код с учётом логической перспективы, чтобы разобраться, где могут быть введены неожиданные данные; как его модифицировать, уменьшить или расширить.
Internet заполнен людьми, пытающимися сделать себе имя на том, что они разрушат ваш код, завалят ваш сайт, разместят на нём неподходящее содержимое, и вообще желающими сделать вашу жизнь интересной. И неважно, маленький или большой у вас сайт, вы всегда являетесь мишенью, находясь online и имея сервер, с которым можно соединиться. Многие программы-кракеры невелики по размеру, они просто просматривают массивы блоков IP, выискивая жертву. Не будьте одной из них.