Руководство по PHP
Пред. |  | След.

# Глава 30. Данные, введенные пользователем

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

Пример 30-1. Потенциально опасное использование переменных

`<?php // удалить файлы из домашней директории пользователя... // а может, еще что нибудь? unlink ($evil_var); // записать в лог-файл выполняемое действие... // может быть, даже /etc/passwd? fwrite ($fp, $evil_var); // выполнение тривиальных действий... или rm -rf *? system ($evil_var); exec ($evil_var); ?>`

Вы должны тщательно проверять ваш код и быть абсолютно уверены в том, что все данные, передаваемые веб-браузером, проверяются надлежащим образом. Попробуйте ответить для себя на следующие вопросы:

- Будет ли данный скрипт воздействовать исключительно на предполагаемые данные?

- Правильно ли будут обработаны некорректные или нестандартные данные?

- Возможно ли использование скрипта не предусмотренным способом?

- Возможно ли его использование в сочетании с другими скриптами в негативных целях?

- Будет ли каждая транзакция корректно логирована?

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

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

Пред. | Начало | След.
Использование глобальных переменных (Register_Globals) | Уровень выше | Magic Quotes