Эта тема на forum.dklab.ru


Sl37: Идеология «режимов и служб»
Наткнулся в интернете на материал, описывающий т.н. идеологию «режимов и служб» — http://ilyabirman.ru/meanwhile/2004/09/03/1/. Лично мне такой подход показался довольно интересным и приемлимым для создания небольших сайтов. А что вы думаете?
dimagolov:

01 function modes () {
02 global $mode, $content;
03 $mode = @$_GET['mode'];
04 if (!$mode) $mode = 'frontpage';
05 @require_once 'system/'.$mode.'.php'; # например
06 if (!function_exists ($mode.'_mode')) $mode = 'error404';
07 $content = call_user_func ($mode.'_mode');
08 }


Из серии "мне очень хочется чтобы злобные хакеры меня поимели, поэтому я сделаю максимум возможного для этого". Чего стоит подключание через инклюд любых php файлов, имена которых получены от пользователя.
Sl37:
Вы, видимо, комментарий рядом со строкой не заметили. :-)
dimagolov:
Sl37, просто там множество вещей которые уже всерьез никто не расматривает. да и просто вдумайтесь в строку
@require_once 'system/'.$mode.'.php';
То, что это "например" автора не оправдывает, так как даже например писать откровенную ахинею нельзя. А раз он ее пишет, то значит он просто не понимает, что это ахинея, а раз он таких простых вещей не понимает, то ожидать чего-то хорошего от его идей не стоит.
Sl37:
Ну, может и так. Но это все-таки пример. :D

Кстати, а что вы можете по поводу этого сказать:

Sl37, просто там множество вещей которые уже всерьез никто не расматривает.

dimagolov:
Sl37, Вы поняли в чем именно ахинея, или все же пояснить? просто если нет, то трудо выбирать уровень объяснения.

что не всерьез? да хоть вот это:
Теперь про came_from. Ясно, что форма — это режим. Значит, её генерируют какие-то функции-режимы. Мы можем ввести понятие режим-форма и определить для него требование: любая форма должна содержать скрытый input с именем came_from и значением, равным $_SERVER[’HTTP_REFERER’]. Процесс добавления этого input’а можно легко автоматизировать. Тогда менеджер служб всегда будет знать, куда перекинуть браузер после выполнения службы.
$_SERVER[’HTTP_REFERER’] во-первых не передается некоторыми броузерами, а во-вторых режеться для XSRF атак атакующим скриптом. Поэтому строить сервис завязанный на $_SERVER[’HTTP_REFERER’] глупость полная, так как работать не будет.

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

Sl37, Вы поняли в чем именно ахинея, или все же пояснить? просто если нет, то трудо выбирать уровень объяснения.


Да.


$_SERVER[’HTTP_REFERER’] во-первых не передается некоторыми броузерами


Какими?
dimagolov:
Какими? Например, Safari под Mac. Но есть еще масса ситуаций, от юзера не зависящих, когда, например, прокси режут его.
kernel32:
В той статье какая-то сплошная глупость написана, особенно "порадовала" дыра с require_once(), да ещё с собачкой :)

Эта тема на forum.dklab.ru