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