Самые большие дыры во многих PHP-программах зависят не столько от самого
языка, сколько от кода, написанного без учёта обеспечения безопасности.
Соответственно, вы всегда должны выделять время для исследования влияний на
данный участок кода, чтобы знать о возможном вреде, который может нанести
отправка в него переменной с нестандартным значением.
Пример 4-17. Опасное использование переменных
<?php
// удалить файл из домашней директории пользователя ... а может -
// ещё что-нибудь?
unlink ($evil_var);
// записать логинг доступа ... или, может быть, вхождение /etc/passwd?
fputs ($fp, $evil_var);
// выполнить что-нибудь тривиальное ... или rm -rf *?
system ($evil_var);
exec ($evil_var);
?>
Вы всегда должны тщательно проверять ваш код, чтобы гарантировать, что
любые переменные, отправляемые из web-браузера, соответствующим образом
будут проверены, и задайте себе следующие вопросы:
Будет ли данный скрипт воздействовать только на предполагаемые файлы?
Могут ли быть обработаны необычные или нежелательные данные?
Может ли данный скрипт быть использован несоответствующим образом?
Может ли он быть использован в сочетании с другими скриптами негативным образом?
Будет ли выполнен адекватный логинг для каждой транзакции?
Задав себе эти вопросы при написании скрипта,
а не потом, вы предотвратите возможную переделку для повышения защищённости.
Начав таким образом, вы не гарантируете полную безопасность вашей системы, но сможете значительно повысить её.
Возможно, вы захотите также предусмотреть отключение register_globals,
magic_quotes или других установок, которые могут создать у вас неуверенность
в проверке, источнике или значении данной переменной.
Работа с PHP в режиме error_reporting(E_ALL) также может помочь,
предупреждая вас о переменных, используемых до проверки или инициализации (что предотвратит операции с необычными данными).