 |
Самые
большие дыры во многих 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)
также может помочь, предупреждая вас о переменных, используемых до проверки или
инициализации (что предотвратит операции с необычными данными). |  |