PHP

Язык PHP представляет собой препроцессор гипертекста, позволяющий создавать дина- мические страницы Web. Язык РНР содержит собственный набор средств для обеспече- ния безопасности, на которые вы можете вполне положиться. Динамические страницы любой конструкции имеют свои специфические проблемы, поскольку в таких страницах применяется ввод данных пользователями (прямой или косвенный), что может повлиять на все то, что может случиться со страницей. Поэтому, как и в случае CGI-сиенариев, вы должны очень тщательно отслеживать в своем коде наличие потенциальных дыр в сис- теме защиты.

Для начала убедитесь, что в вашей реализации средств РНР применен уровень безопас- ности, который запрашивается сервером в процессе инсталляции РНР. Почитайте доку- ментацию, поставляемую с вашей версией РНР, чтобы выявить и закрыть бреши в сис- теме защиты перед тем, как ими воспользуется некая посторонняя личность. Вы можете также исполнять свои сценарии РНР в «защищенном режиме» (safe mode), аналогичном режиму коррекции ошибок (с параметром -Т) в языке Perl - в обоих случаях интерпрета- тор/анализатор отменит некоторые потенциально опасные действия сценария.

Безопасный доступ к системе Perl

Если ваша программа CGI для исполнения некоторых задач обращается к командной оболочке, вы должны настройкой соответствующих параметров выбрать уровень безопасности, который в наибольшей степени отвечает вашим требованиям. Конечно, если доступ к вашей программе сильно ограничен, и программа может быть использована только весьма узким кругом доверенных лиц, то вас не должен сильно заботить уровень безопасности каждого метода системного вызова. Обдумайте следующий пример кода:

$user_input = $query->param('user_input');
'/usr/bin/go Suserjnput1; #very dangerous!
system Vusr/bin/go Suserjnput'; #still dangerous!
system '/usr/bin/go1, Suserjnput; #much better!
Suserjnput =~ m/[a-zA-ZO-9\._@]V;
system Yusr/bin/go1, Suserjnput; #much, much better!

Как правило, для обеспечения безопасности сценариев РНР вы должны применять те же технические приемы, что и для любого другого средства конструирования динамических страниц или процедур интерактивного взаимодействия:

• Никому не доверяйте. Заранее предполагайте, что каждый ваш посетитель намере- вается обмануть или разрушить вашу систему. Если вы разрабатываете свой код так, как будто вы - параноик, вы, возможно, предохраните себя от некоторых злоключений.

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

• Используйте все меры предосторожности. Не думайте, что одну маленькую дыру в системе защиты никто не найдет - найдут! Избавьтесь от риска финансовых потерь и стрессов, заткнув все дыры, которые вы только можете найти, и далее зацементи- руйте эти дыры крепким раствором.

• Не верьте никому. Достать вас может каждый. Если вы будете придерживаться этих правил, вы можете рассчитывать выйти сухим из воды.

Продолжение темы:

Полезная информация