Данные, отправленные пользователем

Самые слабые места в большинстве программ на PHP не являются следствием проблем самого языка, напротив, они являются следствием написания этих программ без учета соображений безопасности. Поэтому вы всегда должны тратить некоторое время на продумывание ограничений тех или иных участков кода для снижения риска от некорректно заданных переменных.

Пример 5-17. Небезопасное использование переменной

<?php
// удаление файла из пользовательского домашнего каталога... или из чьего-то еще?
unlink ($evil_var);

// запись журнала доступа... или запись в /etc/passwd?
fputs ($fp, $evil_var);

// исполнение чего-нибудь простенького.. или rm -rf *?
system ($evil_var);
exec ($evil_var);

?>
Всегда нужно аккуратно исследовать программу, чтобы убедиться, что все переменные, передаваемые пользователем, проверяются. Можно даже задавать себе следующие вопросы:

Задавая себе эти вопросы во время написания программы, можно предотвратить переписывание ее "с нуля" в связи с проблемами безопасности. Переняв подобный образ мышления, вы не гарантируете безопасности системы, но увеличите эту безопасность.

Также следует подумать об отключении register_globals, magic_quotes, и других опций, которые ставят под сомнение корректность, источник и значения отдельно взятых переменных. Работа в режиме отображения всех ошибок (error_reporting=E_ALL) также предупредит об использовании переменных без предварительной проверки и инициализации.