PHP: принципы безопасности

PHP: принципы безопасности

21.09.2013

Просмотров: 2820


В данной записи мы вкратце рассмотрим основные принципы безопасности при создании сайтов.

— Никогда не доверяйте полностью содержимому GET-параметров. Любые GET-параметры следует непременно проверять и обезвреживать. При получении лучше всего распределять их по внутренним (служебным) переменным либо константам, а сам GET-массив необходимо уничтожить. Конкретный пример. Вы решили использовать для анализа непосредственно GET-параметр, к примеру, $_GET[page]. В какой-то момент внедрённый на ваш сайт вирусный код модифицирует значение этого элемента... а далее всё зависит от того, что именно было внедрено. При использовании же изъятого из этого элемента значенияф в константе — злоумышленнику (или внедрённому им коду) ещё предстоит выяснить имя переменной или константы, унаследовавшей значение. В случае с константой злоумышленник (или его код) может модифицировать значение до посинения — значение останется прежним.

— Все параметры, неизменные на протяжении выполнения всего сценария, следует определять как константы оператором DEFINE. Переопределить единожды определённую константу в PHP, как известно, невозможно, а значит, изменить значение констант при попытке взлома злоумышленнику не удастся. Те же основания, что и в предыдущем совете.

— Постарайтесь по возможности не использовать для главного индексного файла название «index.php» — лучше всего выбрать для него нечто более нейтральное и менее популярное, например, «main.php» или «site.php». Не секрет, что целью злоумышленников при попытках взлома сайтов в первую очередь являются сценарии с названиями «index.php» и «admin.php», тогда как сценарий с менее известным наименованием им придётся определять наугад. Для пущего эффекта можете разместить в корне сервера файл с наименованием «index.php» и текстом внутри типа «К сожалению, взлом сайта невозможен, так как кто-то уже взломал сайт ранее, что не мешает сайту функционировать в стандартном режиме». Начинающих кулхацкеров очень впечатляет.

— Вне зависимости от типа ссылок на сайте никогда не показывайте в ссылках наименование сценария, т. е. вместо «http://site.ru/main.php?page=1» ссылка должна выглядеть как «http://site.ru/?page=1». Соответственно, распределение действий должен брать на себя один — главный — сценарий, передавая управление подключаемым модулям. Основание: предоставление возможности хакерам самостоятельно угадать наименование сценария. Основание: то же, что и в предыдущем совете.

— Оформляйте все подключаемые модули как набор функций, что предотвратит немедленный запуск выполняемых ими задач при несанкционированном запуске.

— Подключайте модули оператором require_once — это помешает злоумышленникам при попытках взлома подключить их повторно. Не используйте операторы require и тем более include.

— Отключите глобальные переменные на сайте директивой php_flag register_globals OFF в файле htaccess. При необходимости используйте в качестве глобальных переменных константы, суперглобальные массивы типа GET или прямую передачу данных в функции при вызове.

— Одна из самых грубых ошибок — разрешение на просмотр содержимого каталогов на сайте. В случае, если настройками сервера разрешён такой просмотр, необходимо отключить его директивой Options -Indexes в файле htaccess. Основание очевидно: просмотр содержимого каталогов сразу же откроет злоумышленникам список потенциальных целей.

— В конце главного сценария всегда должен стоять оператор EXIT. Основание: один из самых популярных способов взлома сайтов — дописывание вирусного кода в конце сценария. При наличии оператора EXIT злоумышленник (или внедлрённый им на сервер код) могут дописывать паразитные куски в конец главного сценария до посинения, оператор EXIT не позволит им выполниться, так как никакой код после этого оператора более не выполняется.


Рекомендую также по этой теме: «PHP+HTML: маленькие хитрости 1»


Автор сайта


Комментарии

Добавить новый комментарий:

Как вас зовут:

Проверка, не робот ли вы — введите цифры с картинки:  

Прим. автора сайта: премодерация всех комментариев.

комментариев не найдено — ваш может стать первым!


© «Таксор». Интернет-мастерская М. Ю. Уткина.