Как стать автором
Обновить

Комментарии 38

Два вопроса:

1) Сообщили ли разработчикам?
2) Все-таки не так уж просто стороннему человеку добыть site_id. Нужно как-минимум иметь доступ к административной части или файловой системе.

Другими словами получается, чтобы получить доступ к админке и файловой системе — надо знать site_id, а чтобы знать site_id — надо иметь доступ к файлам или админке.
сорри, ответ не туда написал (см. ниже).
1. Да, сообщил. Хотя более чем уверен, что будут фиксить довольно продолжительное время, так как слишком много завязано на этом. Издержки многосайтовости…
2. На самом деле не все так сложно. Есть много моментов:
во-первых, переменная $site_id — GLOBAL, а значит хоть какой дохлый код затесается в окружение $modx, все, можно ее перехватить.
во-вторых, проблема еще и в следующем: в MODx Revolution очень гибко настраиваются политики безопасности (группы пользователей, роли и т.п.)… А какой смысл, если тебе дали доступ одну страничку подправить, с доступом к только одной страничке, и больше ничего, а ты влегкую перехватываешь эту переменную в POST-данных? Всё. Есть ключик ко всему…
Да и еще много моментов…
киньте плз ссылку на баг
Ну если тебе дали доступ, то ты его как-то заслужил.

В общем это все-равно что в версии 1.0 Evolution были SQL инъекции в админке, но это не самый критичный момент.

Да, киньте ссылочку на баг, где разместили. За него же можно голосовать в трекере, чтобы обратили внимание.
Заслужить по разному можно. Но если ограничили права, значит они должны быть ограничены.

Ссылка чуть ниже
У меня не вышло получить доступ по ссылке. Может, вам тоже стоит обновиться на 2.1.1?

— Make modauth calculation independent of session_id
— Ensure login/logout processors do not add Contexts with empty keys

Ссылка

Ну и, в любом случае, закрывать админку силами веб-сервера для левых IP совершенно не вредно.
Да, выше я уже сказал, что в версии 2.1.1 пофиксили. Но проблема в том, что 2.1 пока очень сырая. Полно багов в админке. Особенно убивает когда включаешь ЧПУ (тогда поле alias становится обязательным), забываешь заполнить это поле, жмешь Сохранить, получаешь соответствующее сообщение, заполняешь псевдоним, жмешь Сохранить опять и получаешь сообщение о невозможности создать копию документа (хотя, во-первых, не копия создается, а новый документ, а во-вторых, запрос на сервер даже не отправляется), то есть тупо нельзя сохранить новый документ. Да и прочих моментов хватает.

А закрывать по ip… Далеко не всегда резон.
Вот мне всегда интересно, зачем использовать эти жалкие цмски, когда есть полно более серьезных и гибких фреймворков? Уверен, при наличии небольшого количества собственных наработок сделать сайт на той же симфони можно примерно за столько же времени (плюс-минус), как и на модэксе, однако же структура приложения будет полностью под контролем и любой шаг в сторону будет прост, понятен и занимать не так много времени. Тут же стандартный функционал реализуется быстро и из коробки (чем и подкупает кучу новичков) а сделать что-то немного более нестандартное — гораздо сложнее. Надо перелопатить ядро цмски, плагины и черт знает что еще. Правда не понимаю для чего писать сложные сайты на цмсках.
Поправляю: MODx — это не жалкая ЦМСка, фреймворк. Так, на минуточку…
Просто ничто не совершенно под луной. Я этот баг нашел только потому что уж очень хорошо знаю MODx (более двух лет с ним работаю). А в целом это далеко не самая дырявая платформа.
Да нет, не нужно сравнивать слегка подросшую цмску, которая почему-то себя обозвала фреймворком и настоящие, полноценные фреймворки с mvc, например
С каким MVC? При чем тут это? Вы о чем говорите?!!! MVC — это модель (Model-View-Controller). Я на двух файлах ее реализую (отдельно логика, отдельно шаблон). Вы еще Кохану вспомните и HMVC и тогда вообще скажите что все остальное — детский сад.
MODx — это полноценный фреймворк с CMS-кой, которую можно легко удалить, а пространство на жестком диске после нее забить нулями на 3 раза, а потом легко написать свою CMS-ку к нему.
Если не разбираетесь в вопросе, то не обязательно лезть. Этот топик, если вы не поняли еще, для разработчиков MODx, и находится в соответствующем разделе.
Мне виднее куда мне лезть и извините, если задел ваши профессиональные чувства. Модэкс — смешная поделка, по сравнению с любыми современнами фреймворками и именно это вы подтверждаете своим топиком. А mvc — это уже не два файла (класс модели, класс формы/валидаторов, класс контроллера и тимплейт). Жаль, что большинство не понимают разницы в используемых средствах разработки и настолько узколобы, что не могут адекватно сравнить два подхода в разработке — каркас приложения и полностью свой код контролируемый код и чьи-то там готовые разработки для быстрого клепания сайтов в студии из трех студентов. Откровенно не знаю ни одного нормального разработчика, разменивающегося на битрисы/модексы/джумлы.
Может просто вы не попали в общество нормальных программистов?
Давайте не будем тут разводить извечные баталии ни о чем. Топик не этого касается. Создайте топик CMS vs MVC, мы придем туда и поспорим.
К счастью, попал. А разводить воду о том, что и так понятно опытным людям и напрочь непонятно неопытным — не стоит. Кстати, мне было бы тоже неприятно, если бы меня ткнули носом в профессиональную стагнацию или если бы я считал mvc «двумя файлами, в одном — шаблон, в другом — логика»
Создайте топик CMS vs MVC

Это ведь была шутка, верно?
ну да :-)
только в каждой шутке есть доля шутки
Николай, похоже вы, за пару лет работы с этой замечательной CMS совсем позабыли что такое MVC. Сама аббревиатура, состоящая из трёх букв, как бы намекает, что парадигма MVC подразумевает под собой немного большее, чем разделение логики и представления.
Ну вы же взрослые люди, может просто достать и померяться?
Боюсь, меня в офисе не так поймут.
да нет, меряться не собираюсь. Просто не нравится когда с больной головы на здоровую перекладывают.
Вы можете хоть в 10 файлов рассовать, не в этом смысл.
Главное — это отделить логику от визуализации.

Нет, вы правы, конечно, на счет трех составляющих: это Вьюха, Модель и Контроллер, который выступает посредником между Вьюхой и Модулем. Но не важно в трех файлах это размещается, или в тысячи.
В новой версии коннекторов под modx (август 2011) установлен свитч на контексты. Контекст по умолчанию mgr. Других пока нет. Так что беспокоиться нет смысла о защите в этой теме и об расширяемости коннекторов.
Да, защитили. Только больше необходимого.
$siteId = $_SESSION["modx.{$this->modx->context->get('key')}.user.token"];

/* ensure headers are sent for proper authentication */
if (!isset($_SERVER['HTTP_MODAUTH']) && !isset($_REQUEST['HTTP_MODAUTH'])) {
$this->body = $modx->error->failure($modx->lexicon('access_denied'));

} else if ( isset($_SERVER['HTTP_MODAUTH']) && $_SERVER['HTTP_MODAUTH'] != $siteId ) {
$this->body = $modx->error->failure($modx->lexicon('access_denied'));

} else if (isset($_REQUEST['HTTP_MODAUTH']) && $_REQUEST['HTTP_MODAUTH'] != $siteId) {
$this->body = $modx->error->failure($modx->lexicon('access_denied'));


Теперь старые публичные коннекторы не работают. Требуются дополнительные телодвижения
Все таки как то можно сделать публичный коннектор, ведь ключ нельзя во фронтенде использовать?

sry
Конечно можно, это же MODx)))
Я не стал изобретать велосипед. Раньше в публичных коннекторах объявлялась MODX_REQP, false
Вот и сейчас я просто немного дописал в этом коде
else if ( isset($_SERVER['HTTP_MODAUTH']) && $_SERVER['HTTP_MODAUTH'] != $siteId && (!defined('MODX_REQP') || MODX_REQP !== false)) {
$this->body = $modx->error->failure($modx->lexicon('access_denied'));

То есть если объявлена MODX_REQP, false, то пропускать.

Этот код в файле core/model/modconnectorresponse.class.php
Вот только сейчас подумал, если у нас есть коннектор и мы его хотим открыть. почему не сделать его заведомо с ключом.

/assets/.../connector.php
...
if($_REQUEST['action'] == 'имя_разрешенного процессора')
$_REQUEST['HTTP_MODAUTH'] = $_SESSION["modx.{$modx->context->get('key')}.user.token"];

тут проблема возможно: скорее всего, если пользователь не авторизован, у него просто не будет этого токена. Проверь
Я проверил, и оказалось, что токен в контексте mgr есть, а в web нет.
вот-вот, потому и я и не стал изобретать велосипед
Ну а раз мы разрешаем всем открытый доступ. нам нет разницы mgr это или web. Копировать любой доступный ключ и все.
Дело в другом. Существуют различные настройки для различных контекстов (точнее их можно задать), и если мы не проинициализируем контекст, то мы не получим его настройки.
К тому же вообще не люблю лишний раз усложнять. Эти потом опять что-нить перепишут, и задача все усложняться и усложняться будет
Проблема в том, что исходники я не хочу менять.

Да… Я как раз и боюсь. что они чтото изменят. Неужто лучше брать xpdo и самому все делать)).
Можно и не трогать код движка, а написать свой класс-коннектор в стороне и расширить базовый, перегрузив только одну функцию, а коннектор-запросы обрабатывать через свой коннектор-класс.
При этом и изменения в двиге будут, и код не будет тронут.
А можешь подсказать, как сделать публичнй коннектор. У меня как раз в этм загвоздка, он меня не пускает к процессорам из assets. Решил подключить xpdo вручную и работать так с объектами.

Все таки как то можно сделать публичный коннектор, ведь ключ нельзя во фронтенде использовать?
что поправить, написал выше. А в остальном все как и раньше.
Только не забывай, если критично, указывать какой контекст через переменную $_REQUEST['ctx'] и при необходимости инициировать данный контекст, скорее всего не через initialize, а через switchContext
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории