Николай Ланец
8 мар. 2014 г., 18:22

ShopModxBox-2.2.2-beta, а так же немного о безопасности в MODX Revolution

Евгений ака Agel_Nash в очередной раз нашел способ выполнять взлом MODX Revolution. По сути он объединил в данном случае сразу две более ранние уязвимости — подмена контекста в запросах к коннекторам, и, собственно, SQL-инъекции в xPDO. Первую уязвимость в свое время как бэ прикрыли в версии 2.2.8. Сейчас Евгений просто выполнил чуть другой финт, который позволяет сделать то же самое, и во вчерашнем релизе 2.2.13 добавили еще проверочку, которая защищает от подобного рода хаков (хотя я по прежнему убежден, что им следует дергать контекст из БД, убеждаясь, что запрошенный контекст действительно существует, а не просто играться с новым объектом). А вот саму уязвимость с SQL-инъекциями пока так и не закрыли, и это очень даже не хорошо. Могу точно сказать, что есть еще не мало способов выполнить этот эксплойт, так что они прикрыли только одну из кучи дверей, ведущих к данной дыре.
Так что же делать, чтобы дополнительно обезопаситься от этого? Ответ прост — используйте другие названия для системных папок connectors, core, manager, а так же свой уникальный префикс для таблиц вместо _modx. Это в значительной степени повысит безопасность сайта, так как во-первых, надо знать где коннекторы, чтобы отправить на них атакующие запросы, а во-вторых, SQL-инъекция требует знания полного наименования таблицы, чего злоумышленник не может сделать, не получив конфиги сайта.
Собственно, вкупе с этим и анонсирую новую сборку ShopModxBox. В ней как раз доработана корректная работа с кастомными системными папками и префиксами таблиц. То есть инсталлируете чистый MODX с кастомными конфигами, накатываете на него эту сборку и она будет работать нормально. Есть только один момент — хотя я и добавил в пространства имен плейсхолдеры-конфиги типа [[++core_path]], в момент снятия снимка эти конфиги источников файлов все равно конвертируются в абсолютные значения в соответствии с текущими конфигами сайта-источника, и потому в снимок попадают абсолютные значения. Итог — у вас часть источников файлов будет иметь некорректные пути. Их надо будет вручную поправить в настройках источников файлов.
Еще такой момент: если кто-то хочет свой MODX-сайт изменить, чтобы в нем были другие папки и префиксы таблиц, то здесь опять-таки помогает vapor. Делаете им снимок текущего сайта, инсталлируете новый MODX Revo со своими кастомными папками и префиксами, и накатываете на него этот снимок. В большинстве случаев все будет ОК.
Всем привет Пакет автоматом устанавливается в web контекст, не смотря на то, что контекстом по умолчанию является совсем другой. Не знаю, почему, но я как-то с самого первого сайта стал все делать в контексте, отличном от стандартного. Попробую перенести все в другой контекст и протестировать, может и все будет нормально работать, но было бы шикарно, если бы все устанавливалось в контекст по умолчанию (index.php) Еще обратил внимание, что после установки язык Manager-а меняется на английский, никакх проблем переключить нет, конечно, но немного шокирует, особенно если привык работать в русском интерфейсе :-) Огромное спасибо за сборку, давно ждал реализацю магазина именно от вас, так как симпатизирую вашему подходу. И последнее, подскажите, как поддержать ваш проект через PayPal?
Добрый день!
Уточняю на счет контекста, языка и т.п.: не раз говорил о том, что этот снимок сайта полностью затирает весь MODX, заливая свое поверх. При этом все таблицы, куда должно что-то записаться, предварительно очищаются. То есть если вы ставите чистый MODX Revolution, добавляете там новый контекст, меняете в настройках контекст по умолчанию и т.п. — все это перетирается при установке. Перенести в другой контекст на готовом магазине можно, но не просто. К сожалению, в MODX-е все завязанное на контекст не по id идет, а по имени контекста, то есть не достаточно просто в таблице изменить имя контекста.
Огромное спасибо за сборку
Огромное пожалуйста! :)
И последнее, подскажите, как поддержать ваш проект через PayPal?
А справа в блоке «Отблагодарить» указан PP-аккаунт — info@modxclub.ru Заранее спасибо!
На счет затирания я все понял, и даже уже не раз проверил :-) Проблему осознал, но все же попробую. Сейчас установил пакет, перенес все в другой контекст, сменил контекст по умолчанию в настройках… Все сбросил, обновил. Пока все работает, проблем никаких пока не обнаружил. А не подскажете, где могут быть прямые ссылки на контекст в сборке? Что бы обратить более пристальное внимание? Я не использую много контекстов, я просто использую другой вместо стандартного./ Небольшую благодарность отправил.
На счет смены контекстов — все же идея не очень удачная. В MODX-е далеко не идеально все сделано с контекстами. К примеру, не реализован полноценный механизм инициализации кастомных контекстов в запросах. Вот если у вас на сайт заходят пользователи, в index.php прописано по умолчанию $modx->initialize('web'); Даже если вы в плагине пропишите $modx->switchContext($ctx);, это все равно не будет корректно работать, так как инициализация пользователя выполняется именно во время инициализации контекста через $modx->initialize(). Это скажется на корректной инициализации пользователя, его правах и т.п. Здесь остается только один вариант — в index.php прописывать ручками нужный контекст. Второй момент — инициализация контекста в коннекторах. Проблема все та же…
И по соображениям безопасности у нас в коннекторах жестко прописана инициализация контекста web (точнее жестко указываем, какой контекст инициализировать). Скорее всего, пока не появится корректный механизм по контекстам, так и останется по умолчанию web. В общем, советую все-таки оставлять по умолчанию контекст web. Это еще не все моменты.
А не подскажете, где могут быть прямые ссылки на контекст в сборке? Что бы обратить более пристальное внимание?
Вопрос не совсем понял.
За благодарность спасибо! Получил.
Спасибо, понял, не буду выпендриваться, я получил ответы на все вопросы
Здраствуйте Николай! Был вопрос, может быть я где то пропустил, но в мануалах нет по этому поводу ничего, что бы помогло мне. После установки Shopmodxbox на чистый Revolution, стирается запись в БД от старого админа (его логин и пароль), который был при установке. Вместо него встает новый admin. Я в настройках профиля сменил у этого админа логин и пароль. Далее выход из админки, а зайти обратно не могу. При новом заходе ошибка не выводиться, выдается обратно пустая форма входа. В БД таблица с сессиями не сломана. работает. То есть при новом вводе логина и пароля создается новая сессия. в БД она присутствует. Как можно решить данную проблему, подскажите пожалуйста хотя бы куда копать в поиске данной проблемы. Облазил уже форумы. Ответа который бы помог не нашел.
Добрый день! То, что удаляется старый пользователь, и создаются новые — это нормально. Когда накатывается сборка, тогда таблица юзеров очищается полностью, и создаются новые. Скорее всего все-таки вы в чем-то ошиблись при редактировании админа. Попробуйте накатить сборку заново, но не редактировать админа, а создать нового пользователя, и в случае успеха уже попробуйте админа отредактировать. На случай, если в админку вообще никак не войти, а надо очень (при этом есть доступ по ftp или типа того), открывайте файл manager/index.php и сразу после инициализации MODX-а ($modx->initialize()) пишите:
$user = $modx->newObject('modUser', array( "username" => "myuername", "password" => "mypassword", )); $profile = $modx->newObject("modUserProfile", array( "email" => "myemail" )); $user->addOne($profile); $user->sudo = 1; $user->save(); return;
После чего заходите на страничку админки и будет создан пользователь. Затем комментируете или удаляете этот код и заходите под новой учетной записью.
Срочно не надо. Попробовал как Вы сказали, создал нового пользователя. В настройках указал все тоже самое что у админа, кроме атрибутов (в дополнительном поле). Результат такой же, пустая форма при вводе логина и пароля.
Пришлите в личку адрес сайта, я посмотрю вечером что там и как (только базового пользователя admin оставьте)
находиться на локальном сервере, могу только дать доступ через удаленку.
Тогда пробуйте на нормальном сервере. Скорее всего что-то не то с локальным сервером.
Николай, доброго дня! Установил ShopModxBox на чистый Revo. Не пойму что не так, ибо абсолютный нуб в modx, но при попытке просмотра любой из страниц, кроме главной ничего не вижу: «The requested URL /o-shopmodxbox.html was not found on this server.» Главная работает нормально… Пожалуйста, подскажите в чем я ошибся?
Проблема не в модэксе, а в подмене УРЛов. Там ЧПУ, соответственно надо правила подмены прописывать. Если у вас веб-сервер апач, то в корне сайта просто переименуйте ht.access в .htaccess
Да-да, уже переименовал, но почему-то не помогло…
Или не апач, а нгинкс используется, или правила не учитываются. В любом случае, это вопрос к веб-серверу, а не к MODX-у. Здесь вам самостоятельно придется разбираться.
Да, скорее всего апач неправильно настроен, спасибо за оперативный ответ!
Нашел! Вдруг кому пригодится, оставлю здесь: dig.org.ua/2008/01/26/mod-rewrite-on-apache2-in-ubuntu/
Ну да, не было мода для апача, поэтому и правила не учитывались.
Попробовал установить вашу сборку, сделал как все сказали, установилась за 36 секунд. Но появилась проблема, исчезло верхнее меню. Устанавливал на чистый modx-2.3.1-pl В чем причина не подскажете? Хостюсь на hostgator.com Apache: 2.2.26 PHP: 5.4.29 Хотя странно при обновлении Resizer написал [Resizer] PHP version: 5.2.17 Resizer requires PHP 5.3.2 or higher В чем прикол не могу понять, версия на сервере PHP: 5.4.29 вроде как. .htaccess изменил.
Проблема в том, что ставите на 2.3.1 (там внутряк весь изменили). Ставить надо на 2.2+ (сейчас актуальная 2.2.15).
Попробовал установить 2.2.15 после установки при заходе в админку пишет ошибку syntax error: и блок "Недавно редактированные ресурсы" постоянно грузится и не может подгрузиться, соответственно ничего не работает. В чем прикол?
Шлите мне на n.lanets@modxclub.ru адрес админки и логин/пароль в нее, я гляну. Судя по всему ошибка разбора JSON.
Все встало без проблем, никаких ошибок не наблюдаю. Проверяйте. Логин/пароль поставил как присылали.
Действительно все встало, хз откуда были ошибки. Пощюпаю сборку потом отпишусь.
После установки shopModx первым способом при попытке открыть любую страницу кроме Главной, выдается сообщение Not Found The requested URL /index.php was not found on this server. Что может быть не так в моем случае?
Смотрите подмену УРЛов (на уровне .htaccess или nginx, смотря что и как у вас на сервере настроено). Особо вам никто не поможет, так как это вопрос в хостинге, а не в MODX-е.
Спасибо, буду разбираться.
Походу, ссылки на статью надо менять на такой вид, сайт Борисова взломали и уничтожили. Шучу конечно, просто он его отключил наверно.
Можем все-таки заработает :) А народ пусть вебархивами учится пользоваться)

Добавить комментарий