В этой статье мы очередной раз поговорим о безопасной работе сайтов и именно о том, почему опасно включать register_globals на сервере? Если вы уже сталкивались с установкой CMS DataLife Engine, то вам известно, что разработчики этого скрипта предостерегают о том, что на сервере включена функция register_globals и советуют её отключить! Дело в том что на любой сайт или проект в интернете могут положить глаз вредители кто то с целью материальной выгоды а кто то просто что бы подпортить вам настроение и показать вот какой я умный.
Скажу вам одно взломать любую форму скрипта просто и вам не поможет простая проверка данных с помощью jаvascript тем более если включена директива register_globals это ещё облегчит XSS-атаку. И так приходим к выводу, что включенная директива register_globals это наибольшая дыра в безопасности скрипта. И включена она по умолчанию почти на всех серверах!
Новички расценивают автоматическую регистрацию глобальных переменных как удобство, но они не понимают, насколько опасна данная опция. Сервер, на котором включена директива register_globals, автоматически назначает глобальные переменные по любым параметрам формы. Чтобы понять, насколько это опасно, давайте рассмотрим следующий пример.
Предположим, что наш сценарий называется process .php и вносит данные, полученные из формы, в базу данных. Форма выглядит так:
<input name="username" type="text" size="15" maxlength="64">
При запуске сценария process .php PHP (при условии, что автоматическая регистрация глобальных переменных включена) создаст переменную $username и присвоит ей значение этой переменной, значение параметра username. Однако по-прежнему мы можем обращаться к этому значению через $_POST [username ] или $_GET [username].
Проблемы с безопасностью возникают потому, что РНР создает переменные для каждого GET/POST-параметра, и это большая проблема; если вы забудете инициализировать переменную - кто угодно сможет манипулировать ею.
Рассмотрим сценарий ниже. Например, если переменная $authorized установлена в true, она покажет конфиденциальную информацию пользователю. В нормальных условиях переменная $authorized устанавливается в true гипотетической функцией authenticated_user (), только если пользователь был аутентифицирован. Но если register_globals включена, любой может передать GET-параметр authorized=l, чтобы таким образом обойти авторизацию:
<?php
// Устанавливаем
$authorized = true
// только если пользователь прошел аутентификацию
if (authenticated_user()) { $authorized = true;}
?>
На этом сегодня всё!
Отзывы