Untitled Document

Ядерное оружие | Графика | Математика | Физика | Заказать диплом | Информатика | ТКМ | Электротехника | Атомная энергетика | Лекции
Учебник РНР
НазадГлава 4. БезопасностьВперёд

Использование Register_Globals

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

Хотя понадобятся некоторые дополнительные усилия при работе с PHP, но преимущества от этой работы с лихвой окупят эти затраты.
Пример 4-14. Работа без register_globals=off
<?php 
if ($username) { // может быть подделана пользователем в get/post/куках $good_login 
= 1; } if ($good_login == 1) { // может быть подделана пользователем в get/post/куках 
fpassthru ("/highly/sensitive/data/index.html"); } ?>
Пример 4-15. Работа с register_globals = off
<?php 
if($_COOKIE['username']){ // может прийти только от куки, подделанной или нет 
$good_login = 1; fpassthru ("/highly/sensitive/data/index.html"); } ?>

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

Пример 4-16. Определение заражения простой переменной
<?php if ($_COOKIE['username'] && !$_POST['username'] 
&& !$_GET['username'] ) { // выполнить проверку имени пользователя ... 
$good_login = 1; fpassthru ("/highly/sensitive/data/index.html"); } else { mail("admin@example.com", 
"Possible breaking attempt", $_SERVER['REMOTE_ADDR']); echo "Security violation, 
admin has been alerted."; exit; } ?>

Конечно, простое отключение register_globals не означает, что код безопасен. Каждый блок передаваемых данных необходимо проверять дополнительно.


Назад Оглавление Вперёд
Сообщение об ошибкеВверхДанные, отправляемые пользователем
Физика лабы
Элементарная математика Кратные интегралы Математический анализ
Векторный анализ Аналитическая геометрия Пределы функции Изучение функции Конспекты по математике Комплексные числа Дифференциальные уравнения Определенные интегралы Лекции по высшей математике Исследование функций Вычисление объема с помощью интегралов Алгеброические структуры