Ацкий мегавзлом своими руками
Проведём небольшой эксперимент на локальной машине.
Для начала создадим скрипт с таким содержанием
echo $_SERVER['HTTP_REFERER'];
назовём его "ref.php" и сохраним в корне сайта.
Теперь идём на форум, пишем сообщение типа
Купить монет (ссылка на ранее созданый нами скрипт)
Далее открываем файл php.ini (у меня он в C:\DENWER\usr\local\php5, у вас может в другом месте). Ищем строку "session.use_cookies = 1", меняем "1" на "0", сохраняем и перезапускаем апач (денвер). Опять идём на форум, находим своё сообщение и переходим по ссылке. Если всё сделали правильно, то должны увидеть что-то типа
http://sait/forum/index.php?id ... 36eb3
Теперь немного занудства.
В двиге в core.php есть строка "@ ini_set('session.use_trans_sid', '1');", которая выставляет настройки так, что если у юзера отключены куки или директива session.use_cookies = 0 (как мы сделали в примере), то php автоматически дописывает идентефикатор сессии ко всем относительным ссылкам (то есть таким как /forum, /chat; к ссылкам типа
http://sait.ru/bla.php ничего не дописывает). По-моему, правильнее было бы вместо этой директивы, включать именно session.use_cookies.
Когда это работает.
Если ваш хостер еблан если вы пользуетесь услугами неквалифицированного хостера, который выключает директиву session.use_cookies. Если вы сами
еблан её отключили по каким-либо причинам. Если у юзера отключены куки. Конкретно для johncms последний случий не так страшен, так как с отключеными куками вы просто не сможете авторизоваться на сайте (смотреть 96-98 строчки файла login.php). Но ведь никто не запретит сайтостроителю переписать авторизацию, так чтобы и без кук юзер заходил на сайт.
...и к чему приводит.
Приведёт это к тому что злоумышленик, узнав идентефикатор сессии, может зайти на сайт под учёткой юзера (главное, чтобы сессия была ещё жива). На джоне, не зная старый пароль, новый не поставить, соответсвенно украсть учётку таким способом не получится. Но напакастить всё же можно.