
Некоторые системы управления позволяют удалять материалы и производить прочие важные вещи не через формы, а по ссылкам, предварительно запросив подтверждение javascript (Вы действительно хотите удалить?). Ссылка для удаления страницы с id=48, может выглядеть, например, так: example.com/admin/content/delete/48. Далее в системе управления проверяются права текущего пользователя и в случае успеха материал удаляется.
Суть проблемы
На сервере не проверяется, действительно ли удаление запрошено пользователем только что или его подставили.
Предположим, система позволяет вставлять изображения в гостевой книге или указывать ссылку на изображение в профиле пользователя. Пользователь, не имея никаких прав на удаление материалов на сайте (обычный такой пользователь) дает ссылку не на изображение, а на вышеприведенную страницу. Изображение, разумеется, не отображается, но кого это волнует? Цель достигнута: как только администратор с требуемыми правами зайдет на страницу с этим псевдоизображением, будет запрошена страница, указанная как источник изображения. На той стороне будут проверены права (администратор? да) и материал будет удален.
Много редакторов
Предположим, на сайте много редакторов с различными правами, больше одного. Каждый редактор имеет права на свой раздел: кто-то на новости, кто-то на товары в каталоге. Теоретически у первого нет права удалять материалы второго. Тем не менее, воспользовавшись вышеописанным механизмом, горизонты кардинально расширяются.
Так понемножку, по чуть-чуть, можно выпилить чуть ли не весь сайт.
Как сделано в Drupal
Drupal – безопасная система управления сайтом. Как побороли эту проблему в Друпале:
-
Каждое важное действие (добавление, изменение, удаление) – это форма POST
Ссылки – для навигации. Внимательный программист совершенно справедливо заметит, что сформировать POST – плевое дело. Но описанная подстава не сработает по причине, описанной в следующем пункте. - Каждая форма имеет ТОКЕН. Это уникальный буквенно-цифровой идентификатор, привязывающий пользователя к выданной ему форме. Далее при получении и проверке данных из формы система управления друпал проверяет, соответствует ли токен сформированной формы токену формы, присланной из браузера. Если нет – проверка не проходит.



