Директива register_globals

elephant[1]До версии 4.2.0 директива была в PHP включена по умолчанию.
Привело это к тому, что многие привыкли, что если в форме она есть, то в PHP коде можно проверять if ($username == ‘admin’)…

Однако, это потенциальная дыра в безопасности, приводящяя ко множеству взломов.
Поэтому к POST, и COOKIE переменным необходимо обращаться через superglobals $_POST, $_, $_COOKIE.
Многим это показалось слишком трудно, поэтому стала популярной команда import_request_variables, возвращающая всё на круги своя.

Другая проблема с register_globals:

<?php
        ...
        if (check_admin($..., $...))
        {
            ...
            $user_level = 169;
        }
        ...
        if ($user_level > 150)
        {
            echo 'Boom!';
        }
    ?>
Если пользователь — не администратор, а переменная $user_level не инициализирована
(ей не придано значение 0 в начале скрипта, в надежде, что оно 0 автоматически),
потенциальный взломщик может дописать в адресной строке foo.php?user_level=999 и получить доступ, тем самым посылая вашу безопасность php на те самые три буквы.

Запись навигация

Top