|
|||||||||||||||||||
|
|
||||||||||||||||||
Я использую понятия безопасности и защищённости как одинаковые, хотя это конечно не одно и то же. Важно понимать, что PHP не является защищённым или не защищённым языком программирования. Защищённость или безопасность ваших internet-программ определяется только их кодом. Глобальные переменные и формуляры.Основной вещью, на которую нужно обращать внимание для обеспечения защищённости программ, является принцип, что всё полученное из вне системы является потенциально опасным. В PHP очень легко убедиться, является ли переменная опасной или нет. Если в php.ini флаг register_globals установлен в on (активирован), то PHP автоматически генерирует переменные из параметров формуляра и куков (cockies). Плохо разработанные программы исходят из того, что переменные только тогда имеют значения, когда эти значения явно заданы. В случае register_globals = on, это предположение может быть ошибочным. Рассмотрим следующий код:
<? if (methode_check()) { $my_var = true; } // ... ?> Очевидно, что в этом коде мы исходим из того, что переменная $my_var принимает значение true только в том случае, если функция methode_check() так же возвращает true. Однако в случае register_globals = on, достаточно выполнить для этой страницы page.php?my_var=1 что бы обеспечить работу программы со значением $my_var = true вне зависимости от возвращаемого значения функцией methode_check(). В настоящий момент в PHP существует три возможности решить эту проблему: Инициализация переменныхВсегда инициализируйте переменные. При этом дырка, показанная в примере выше, была бы закрыта вот так просто:
<? $my_var = false; if (methode_check()) { $my_var = true; } // ... ?> В случае, если конфигурационное значение error_reporting в php.ini установить в E_ALL, то будет обеспечено сообщение о том, что сценарий содержит переменные, которые не проинициализированы. Так к примеру это может выглядеть: <? Сообщение сценария: Notice: Undefined variable: a in c:\myserver\apache\htdocs\test.php on line 2 Конечно же когда программа готова, открытые сообщения обо всех ошибках и информационные сообщения должны быть деактивированы, в противном случае эта информация можеть открыть дополнительные возможности для снижения безопасности, или попросту, для взлома программы. Следующие директивы php.ini рекомендуются для рабочих программ: display_errors = Off Таким образом можно быть уверенным, что сообщения PHP об ошибках никогда не будут открыто показаны на вашем сайте. Однако вместо этого они будут сохранены в файле протоколирования ошибок с целью их анализа. На этом первую статью о безопасности я завершаю, так как время позднее. Продолжение конечно будет. А именно я расскажу (исходя из возможных путей для повышения безопасности программ) о variables_order, как выбирать имена файлов для сценария, о проверке относительных путей, об ограничении доступа к определённым папкам и многом другом. |
|||||||||||||||||||
|