Всем привет!
Новый релиз, как всегда, внезапно :) На этот раз основной причиной послужили большое количество репортов безопасности. Казалось бы, с чего вдруг ;-) Но не всё так страшно.
Более года назад мы сделали небольшой лендинг для англоязычной аудитории и демо к нему. Через какое-то время туда «налетели» любители потестировать, чему мы, в общем-то, были рады. Демо раз в пол часа автоматически обнулялось, тестеры — тестили. А потом пошли репорты с сайта huntr.dev. Поначалу я даже не понял что за репорты и с чего вдруг кто-то бесплатно решил делиться информацией. Как оказалось, этот сервис сам мотивирует своих пользователей (деньгами и внутренним рейтингом) искать уязвимости в open source продуктах. Мы, разумеется, не против. На текущий момент обработано порядка 30 репортов, из них подтверждённых (и исправленных) около 25. Неплохой результат. Но сильно повода для паники нет. Итак, что конкретно мы исправили:
- Исправлена Blind SQL Injection в фильтрах датагридов в админке;
- Исправлена Blind SQL Injection в автозавершении ввода компонента тегов;
- Исправлена Blind SSRF при загрузке фото по ссылке, переписан класс cmsUploader;
- Secure flag для Cookie теперь ставится всегда, если в конфигурации сайта указан протокол HTTPS;
- Исправлены все известные XSS в админке;
- Исправлена проблема и её последствия, когда подстановкой в url можно было отправить самому себе личное сообщение;
- Теперь нельзя изменить пароль на тот же;
- Идентификатор сессии теперь меняется после авторизации/выхода;
- Администраторы теперь не могут со стороны сайта менять пароли друг другу (в админке эта возможность оставлена, т.к. её можно закрыть по ip адресу);
- HTML поля в настройках типов контента (описание, наборы, фильтры) теперь сохраняются через типограф;
- Для строковых полей, если в нём не запрещены HTML теги, значения обрабатываются типографом;
- Редактор Redactor пропатчен из-за возможной XSS.
Если вы не хотите обновляться или нет такой возможности, то из самого опасного — замените этот файл по пути /system/controllers/tags/actions/autocomplete.php. Тут была слепая SQL инъекция. А также отключите для полей изображений добавление по ссылке. В остальном 90% XSS которые мы закрыли, касались админки и в целом их опасность сильно преувеличена. Однако мы старались давать обратную связь хантерам и закрывать/исправлять всё обнаруженное, тем самым мотивируя их на новые поиски, возможно, более опасных уязвимостей. В целом, считаю это отличный опыт и неплохой результат за 70$ (цена трёх доменов, которые мы купили). Уверен, хантеры продолжат поиски, а мы продолжим исправлять то, что они находят.
Другие изменения
- Обновление событий в админке теперь исключает выключенные компоненты;
- Код инвайта теперь сохраняется в Cookie, что по сути является реферальной системой;
- SEO поля в записях типов конетнта теперь мультиязычные;
- Корректная обработка ссылок с хэшами (знак решётки) в пунктах меню;
- Исправлена проблема с ограниченным количеством записей в некоторых разделах админки после обновления до 2.16.0;
- Для поля «Изображение» добавлены опции «Включить редактор изображений перед загрузкой», которые позволяют обрезать изображение перед загрузкой;
- Класс Simple PHP YAML обновлён до актуальной версии;
- Toastr и jQuery обновлены до актуальных версий;
- Мелкие правки установщика InstantCMS.
Как установить обновление InstantCMS
Важно! Убедитесь, что сейчас вы используете версию 2.16.0, иначе, обновитесь сначала до неё.
Перед началом обновления обязательно сделайте резервную копию своего сайта и дамп базы данных. Мы не несем никакой ответственности за любые потери данных, произошедшие в результате неправильных действий при обновлении. Структура базы данных в этой версии не менялась.
- Отключите кеширование в настройках сайта;
- Отключите объединение js и css в настройках сайта;
- Если вы используете свой шаблон и в нем есть файлы, присутствующие в пакете обновления, то обновите их;
- При возникновении «белого экрана» категорически читать здесь;
- Для тех, у кого свой шаблон у нас есть статья как быть, если в обновлении CMS есть изменения в шаблоне, рекомендуем к прочтению.
Если в вашем шаблоне присутствуют JavaScript файлы со своими правками (взяты из /templates/default/js/ или /templates/modern/js/), замените/смержите их из пакета обновления. Не забывайте о сбросе кэша браузера абстрактным счетчиком.
Механизм установки обновлений подробно описан по этой ссылке в документации.
Пакет обновления для ручной установки можно скачать по этой ссылке.
Спасибо, что выбираете InstantCMS.
Добра и Мира ☮
P.S. Мне тут подсказали, что сегодня день программиста оказывается, отличное совпадение. Поздравляю всех причастных!
Поддержите проект
Вы можете стать официальным спонсором или оказать другую поддержку. Вы также здорово поможете, если поставите звезду на GitHub.
Реклама #
Михаил 1 год назад #
хорошая новость на сон грядущий, спасибо за работу
Fuze 1 год назад #
К вашему дню рождению как раз) Поздравляем!
Михаил 1 год назад #
Благодарю!
dChirkis 1 год назад #
Вау, круто. СПАСИБО
oscar 1 год назад #
Вау супер и Вас с праздником, прям супер событие!!! Спасибо!
My-InstantCMS.Ru 1 год назад #
Спасибо за работу Fuze и спасибо тестерам huntr.dev за бесплатный аудит безопасности 👍
pupsik 1 год назад #
Можно поподробней? Желательно для админки которая на Английском
Как это отключить в tinyMCE?
Fuze 1 год назад #
Для редактора tinyMCE делать ничего не надо.
pupsik 1 год назад #
Да что мне это мену. Как мне до него добраться? Нашел. В группах.
Components -> Groups -> Group logo
savenkoffcom 1 год назад #
Спасибо за обновление. Безопасность важнее всего! А не подскажете, случаем, что с обновлением премиум компонентов iVideo и instantMaps. Из-за отсутствия информации о доступности обновлений не могу даже до 2.16.0 обновиться. Слишком много проблем с хуками и отсутствие поддержки новой темы админки сильно напрягает.
savenkoffcom 1 год назад #
Я готов поработать с компонентами для их совместимости с 2.16.0, однако исходный код закрыт. Мне они оба нужны, сильно проблематично отказываться от функционала.
Fuze 1 год назад #
И InstantVideo и тем более InstantMaps поддерживают давно новую админку. Для InstantVideo нет поддержки 2.16.0 и шаблона modern. Когда я такое обновление сделаю — не знаю. Все файлы шаблонов открыты.
savenkoffcom 1 год назад #
Для InstantVideo много ошибок формата
Их исправить самостоятельно невозможно, будем ждать обновления.
Касательно шаблона админки InstantMaps ещё терпимо, но есть над чем поработать.
А вот с InstantVideo совсем плохо, особенно некоторые раздел «Очередь обработки», где вообще ничего невозможно сделать без смены дизайна.
Вообщем InstantVideo очень требует обновления. И я надеюсь, у вас будет время его сделать. Спасибо заранее.
Александр 1 год назад #
Это и на 2.14 можно сделать?
Спасибо за вашу работу!
Fuze 1 год назад #
Да
Def 1 год назад #
Спасибо большое за обновление! на 2.13 подойдет или надо обязательно обновить на 2.14 и далее уже загружать файл?
Fuze 1 год назад #
Просто замените файл, сделав бэкап старого и проверьте автозавершение тегов. Дольше спрашиваете.
CEH9I 1 год назад #
После обновления перестали сохранятся чекбоксы в настройках доступа полей и вообще в админке и ругается на ошибку
CEH9I 1 год назад #
В общем ошибка 503 была из-за отключенного ТК. А чекбоксы следствие кривого обновления ранее, был старый файл system/fields/listgroups.php, после замены на свежий все появилось. Проблему помог решить Zau4man, за что ему огромное спасибо.
Yuran 1 год назад #
Попробовал на локальном обновиться с 2.16.0 через админку, выдало такое:
Ребята, кто нибудь подскажите что это за ошибки… и откуда configs.php...
Fuze 1 год назад #
configs.php появился ещё в 2.16.0. Почему у вас так, я не могу знать. Вероятно вы решили что файл configs.php лишний и удалили его.
Yuran 1 год назад #
Странно… вроде не удалял… наверное обновил до 2.16.0 криво. Сейчас поставлю чистую 2.16.0 и снова попробую проделать все.
Yuran 1 год назад #
Прошу прощения, обновлял с какой то левой версией с github, а не с чистой 2.16.0 — сейчас все четко обновилось.
F_a_R_i_D 1 год назад #
Благодарю за обновление
После обновления нигде не работает кнопка Сохранить
Fuze 1 год назад #
Не знаю о чём речь, но после обновления везде работает кнопка сохранить.
F_a_R_i_D 1 год назад #
prnt.sc/XRoBRCX_HkwL
F_a_R_i_D 1 год назад #
В админке не могу сохранить изменения. Кнопка Сохранить не работает. Не реагирует.
Zau4man 1 год назад #
Пока из предположений, что у вас включена мультиязычность, но обязательные поля на других языках не заполнены.
Поэтому кнопка не нажимается, ожидая заполнения обязательных полей
F_a_R_i_D 1 год назад #
Благодарю. Так и есть. Вспомнил, что такая проблема была у меня. Я удалил папку EN, при обновлении папка опять загрузилась в директорию languages, а строки EN в настройках остались пустыми, поэтому не сохранялся.
Abobo 1 год назад #
Супер, спасибо. А исправлено жуткого подвисания страниц на сайтах с большими базами? Если, к примеру 100k записей, то вся пагинация, да и главная пролистывается с задержкой до 4-6 сек. Я уже год ищу, консультируюсь и не могу решить эту проблему. То что у меня что-то неправильно настроено, ответ хороший. Но у меня мощный дорогой сервер и не самые глупые специалисты. И все как один заявляю мол это особенность движка. Неплохая такая особенность :) Записи заливались на чистую систему без всяких дополнений и если при 10k записей все в летает, то при 100k записей все лагает… Размер базы не превышает 200MB. А так спасибо большое за Ваши труды.
Loadырь 1 год назад #
Вот тут prefitchi.ru/hotels 170к записей легко справляются с вашей «особенностью» движка. При этом второй из самых дешовых хостинг на бегете и без поддержки их специалистов.
Fuze 1 год назад #
На этом сайте вся база 1Гб. 300К личных сообщений, 300К постов на форуме, 75К комментариев. Я к тому, что размер базы в вашем случае мизерный. Более того, любой специалист, кто мало мальски соображает, учитывая что у вас мощный и дорогой сервер, затюнит MySQL и/или добавит недостающие индексы. Да эту базу можно вообще всю в память выкинуть, я не могу знать что у вас тормозит и почему. По кол-ву записей в ТК: у меня есть проект с 520К записей и всё работает быстро. Описанное вами точно не «особенность движка».
Loadырь 1 год назад #
Хотя всё таки предположу, что если поставить некоторые сторонние дополнения авторы, которых их забросили и которые в списках к каждой записи генерируют по три запроса к базе данных, которые дублируются в каждой записи их этого списка, то да, база устанет их обрабатывать.
Выглядит это как-то так
из них 117 генерирует одно поле в 39 записях списка.
Alex Burr 1 год назад #
Подскажите! Проблема после обновления. Не загружаются файлы
Alex Burr 11 месяцев назад #
Проблема так и не решилась?
Fuze 11 месяцев назад #
Начиная с этой версии тип файла определяется по его сигнатуре. Также убедитесь, что в файле system/config/mimetypes.php есть нужные тип и расширение.
boom 8 месяцев назад #
docx перестал грузиться
DeusSpa 1 год назад #
Хорошее обновление,
Раз песня зашла про типограф и обработку полей типографом.
Есть ли возможность при установке галки «Обрабатывать типографом» вывести поле или значения, список… какие значения обрабатывать?
То есть отображаем, что сейчас разрешено например: <iframe </iframe> и дописываем чего нет — для специфичных проектов. Элементарно нет по умолчанию вставки видео с инстаграма например.
Получается надо нырять в файл и проставлять (прописывать разрешения (расширения там)).
Zau4man 1 год назад #
Про улучшение работы типографа разговоры ведутся давно github.com/instantsoft/icms2/issues/923
Видимо, надо делать свой компонент. Но пока по коду непонятно, как и свои теги отловить, и типографу не помешать.
Без типографа текст автоматически становится небезопасным, и оставлять поле без типографа можно только в том случае, когда в него пишут только доверенные лица.
F_a_R_i_D 1 год назад #
Здравствуйте.
Текст вопроса:
Имеется фрагмент кода:
На 2.16.0 все работает. На 2.16.1 имеем вот такой результат:
Откуда растут ноги?
Fuze 1 год назад #
F_a_R_i_D 1 год назад #
Благодарю за ответ.
А что делать если я заранее не знаю тип файла? Я ошибаюсь или в файле system/core/uploadfile.php строки
// Пускаем любые, если не указано
if ($this->allowed_mime === null) {
return true;
}
должны работать, но не работают?
Loadырь 1 год назад #
Здесь вы указываете какие типы файлов пользователю разрешено будет загружать, а не те какие он хочет загружать.
RSN 1 год назад #
Донат отправлен. Fuze, спасибо за то что не забываете развивать систему.
Хорошая новость, мы тоже «за»)) Обновление прошло без проблем.
Fuze 1 год назад #
Спасибо!
AtlantisWeb 1 год назад #
Tinymce загрузка файлов не работает в опере(Версия:95.0.4635.84 Версия Chromium:109.0.5414.120), в консоли выдает ошибку:
В гуглхроме, таже ошибка в консоли, но при этом появляется окно загрузки файла и сам файл загружается.
Fuze 1 год назад #
Без каких-либо подробностей, скриншотов (например ответа от url загрузки файла в консоли браузер) и другой вспомогательной информации мне сложно что-то сказать.
AtlantisWeb 1 год назад #
Установил инстант 2.16.1, в найстройках редактора по умолчанию(Tinymce) включил плагин «icmsinsertfile» выставил нужные расширения файлов для требуемых групп.
Браузер опера, винда 10х64
Браузер хром, винда 10х64
в демоновости, выбираем создать ссылку и кликаем по иконке загрузки файла
далее видим, в консоли браузера ошибку
и окно ошибки редактора «Upload error»
при этом файл можно выбрать, он загрузится и ссылка на него работает.
Fuze 1 год назад #
Теперь понятно. Исправим. Плагин был сделан наспех, в нём есть и другие ошибки.
Region67 1 год назад #
Столкнулся с такой проблемой:
Создаю поле местоположение страна — country, вывожу его с фильтре.
В списке контента выбираю фильтрацию по другим полям, поле страна не трогаю, но оно автоматически попадает в фильтрацию со значением =0 (в урл country =0)
Region67 1 год назад #
Заметил, что данная проблема стала наблюдаться с версии 2.16.0
Fuze 1 год назад #
Откройте файл /system/fields/city.php и строку
Заменить на
Region67 1 год назад #
Отредактировал строки, автоматически страну в фильтр не добавляет. Но теперь, если выбрать только страну, то добавляет регион со значением = 0 и записи соответственно не находит
Fuze 1 год назад #
Здесь также замените '0' на ''
Region67 1 год назад #
Спасибо огромное!!!👍
MixanM 1 год назад #
Есть досадный баг — если установить чистый InstantCMS, и сразу накатить обновление — то потом не не импортирует схему(*.yaml) в виджетах и выдает ошибку: «неверный формат файла»
Nikolay 1 год назад #
Этот вопрос не давно обсуждали на форуме, есть решение от Zau4man.
MixanM 1 год назад #
Спасибо
ALASTAR 1 год назад #
Скажите после установки какие должны быть права на папки и файлы? Меня интересует права 777 на папки и файлы 666, где они должны быть установлены
Fuze 1 год назад #
docs.instantcms.ru/manual/install
ALASTAR 1 год назад #
Там на время установки. А после?
Fuze 1 год назад #
Прочитайте внимательно. Ответ на ваш вопрос в инструкции по установке по ссылке выше.
Это единственное предложении во всей инструкции про права на время установки.
ALASTAR 1 год назад #
С этим понятно. А после установки cache и upload должны стоять 777? И ещё на счёт этого файла theme_modern.yml если 666 на него не установлен то изменения в теме не возможно произвести
Scythian 1 год назад #
На время установки права на файлы и папки, должны быть 777. Потом меняете папки на 755, файлы на 644. Папки — кэш и загрузки оставляете 777, только в них файлы Хтаццес поменяйте на 644.
Def 1 год назад #
Def 1 год назад #
Quzar 1 год назад #
Здравствуйте!
Инфо не нашел.
На 2.16.1, чистая, при включенной отладке и создании поля такая ошибка, но поле создается.
Notice: Undefined index: title in /system/traits/controllers/actions/formFieldItem.php on line 224
Warning: Cannot modify header information — headers already sent by (output started at /system/traits/controllers/actions/formFieldItem.php:224) in /system/core/controller.php on line 1091
Подскажите, где что поправить
Scythian 1 год назад #
Наверное, лучше вопрос на форме задайте, откройте новую тему.
maxisoft 1 год назад #
Поправить не получиться это нужно разработчикам сделать проверку на наличие индекса в массиве в скрипте. Это не ошибка если что, а просто предупреждение что происходит обращение к элементу массива которого нет.
Quzar 1 год назад #
Благодарю за ответ!
То есть самостоятельно сделать эту проверку не выйдет?
maxisoft 1 год назад #
можно и самому исправить.
Quzar 1 год назад #
ок, как это исправить?
Fuze 1 год назад #
Замените в этом файле
на
Quzar 1 год назад #
Благодарю!
decoy 1 год назад #
Пытаюсь запустить задачи системной очереди через планировщик
Notice: Undefined offset: 6258 in /home/d/decoy/sr52.info/public_html/system/core/queue.php on line 122 Notice: Trying to access array offset on value of type null in /home/d/decoy/sr52.info/public_html/system/core/queue.php on line 180 Warning: Cannot modify header information — headers already sent by (output started at /home/d/decoy/sr52.info/public_html/system/core/queue.php:122) in /home/d/decoy/sr52.info/public_html/system/core/controller.php on line 1091
или такое
AtlantisWeb 11 месяцев назад #
Не знаю с какой версии пошло но заметил на этой.
Раньше(например на 2,14,1) «session_id()» была един как для авторизованного пользователя так и для гостя. И привязавшись к нему можно было например гостю сделать добавление товаров в корзину и после авторизации подгружать их же т.к. сессия была едина, а сейчас при авторизации и разлогивании «session_id()» принудительно обновляется каждый раз и данная фишка уже не прокатит.
В сессиях нашел «csrf_token» он вроде как не реагирует на действия авторизации и думаю править свой код под него вместо «session_id()». Планируется ли в последующих релизах что то делать с параметром сессии «csrf_token» и лучше переписать код под куки вместо сессий?
Loadырь 11 месяцев назад #
Это точно случилось на 2.16.0/1 и связано с безопасностью сайта.
csrf_token предназначен для проверки «гуляющих» на сайте данных. Его для сбора товаров в корзине однозначно нельзя использовать. Разве что проверять, что корзина принадлежит вашему сайту. Поэтому для таких случаев лучше использовать свою куку или свои данные в сессии, если есть ограничения по времени работы с корзиной.
Kuper 10 месяцев назад #
Warning: Use of undefined constant LANG_PARSER_IMAGE_ALLOW_IMAGE_CROPPER — assumed 'LANG_PARSER_IMAGE_ALLOW_IMAGE_CROPPER' (this will throw an Error in a future version of PHP) in .ru/public_html/system/fields/image.php on line 59
Warning: Use of undefined constant LANG_PARSER_IMAGE_IMAGE_CROPPER_ROUNDED — assumed 'LANG_PARSER_IMAGE_IMAGE_CROPPER_ROUNDED' (this will throw an Error in a future version of PHP) in ru/public_html/system/fields/image.php on line 62
Warning: Use of undefined constant LANG_PARSER_IMAGE_IMAGE_CROPPER_RATIO — assumed 'LANG_PARSER_IMAGE_IMAGE_CROPPER_RATIO' (this will throw an Error in a future version of PHP) in .ru/public_html/system/fields/image.php on line 66
Warning: Use of undefined constant LANG_PARSER_IMAGE_IMAGE_CROPPER_RATIO_HINT — assumed 'LANG_PARSER_IMAGE_IMAGE_CROPPER_RATIO_HINT' (this will throw an Error in a future version of PHP) in ru/public_html/system/fields/image.php on line 67
Zau4man 10 месяцев назад #
Обновление прошло некрорректно. Константы объявлены в файле /system/languages/ru/language.php github.com/instantsoft/icms2/blob/1d9205baa9e944c5a614b57263f53c071ddea1ab/system/languages/ru/language.php#L209
который загружается при любом обращении к сайту
Судя по ошибке, у вас файл не обновлен.
Kuper 10 месяцев назад #
Вопрос или предложение, не знаю,
Странная система приватности на сайте
Нельзя настроить доступ для контента только для зареганых
Категории так же либо друзья либо все, какие нафиг у админа друзья если это не касается каких то личных материалов
Настройки доступа для добавления есть, а для просмотра нет
Настройки прав групп тож самое, Просмотр чужих приватных записей есть, а запретить просмотр группе вообще нельзя
Запрет просмотра списка так а толку в ленте жмакнул и перешел
Настройки группы для не зареганых вообще нет
В альбомах всем, друзьям или по ссылке, но для каждой отдельной картинки, а почему не для альбома? а допустим зареган/нет или конкретному юзеру?
Группы, так же или все или только группа
То есть по факту если хочешь закрыть какие то разделы сайта то это не получится