Новости Joomla

‼️ 👩‍💻 Обновление безопасности для Tassos Framework!

‼️ 👩‍💻 Обновление безопасности для Tassos Framework!

7 января 2026 года греческому разработчику Тассосу Мариносу сообщили об уязвимости в системном плагине Tassos Framework, который входит в состав его расширений для Joomla.

⚠️ Проблема затрагивает следующие расширения:
- Convert Forms - конструктор форм обратной связи для Joomla
- EngageBox - конструктор всплывающих окон для Joomla
- Google Structured Data - пакет плагинов микроразметки для Joomla
- Advanced Custom Fields - пакет плагинов пользовательских полей (видео-сервисы, карты и иже с ними)
- Smile Pack - пакет расширений
- MailChimp Auto-Subscribe

Незамедлительно была проведена полная внутренняя проверка кода, внедрены дополнительные меры проверки и повышения безопасности, а также выпущены исправленные версии всех затронутых расширений. Проблема полностью решена.

👉 Суть уязвимости.
Уязвимость заключалась в том, как плагин Tassos Framework обрабатывал определенные AJAX-запросы через com_ajaxточку входа Joomla. При определенных условиях внутренняя функциональность фреймворка могла быть вызвана без надлежащих ограничений.

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

При определенных обстоятельствах запросы к базе данных могли быть изменены для извлечения данных из базы данных Joomla. В совокупности эти возможности потенциально могли быть использованы для повышения уровня доступа и выполнения несанкционированного кода.

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

Немедленно обновите расширения до безопасных версий (Joomla 4/5/6 | Joomla 3):
- Convert Forms - v5.1.1 / v.4.1.1
- EngageBox - v.7.1.1 / v,6,3,9
- Google Structured Data - v.6.1.1 / v.5.6.9
- Advanced Custom Fields - v.3.1.1 / v.2.8.10
- Smile Pack - v.2.1.1 / v.1.2.4.
- MailChimp Auto-Subscribe - v.5.1.1+ / v.5.0.4

Все указанные версии включают в себя релиз безопасности плагина Tassos Framework System Plugin v6.0.62.

Если у вас установлено несколько расширений Tassos, достаточно обновить только одно, чтобы применить патч. Однако всегда рекомендуется обновлять все расширения.

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 4682 Просмотров
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
Здравствуйте

Оформление заказа происходит на одной странице
При выборе варианта доставки "Самовывоз" - скрывается поле "Адрес получателя"
скрытие сделал JS примерно так:
Код: javascript
if ($("input:checked").val() == "standard_shipping%7C%D0%A1%D0%B0%D0%BC%D0%BE%D0%B2%D1%8B%D0%B2%D0%BE%D0%B7%7C%D1%81%D0%BE+%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%7C0.00%7C3") {
$("#vm_myadres_div, #vm_myadres_input").hide();
}
else
$("#vm_myadres_div, #vm_myadres_input").show();


Как сделать так, чтобы скрытое при оформлении заказа поле "Адрес получателя" не приходило в письмах админу и покупателю?

Названия полей адреса, которые приходят в письмах, формируются здесь:
components/com_virtuemart/themes/default/templates/order_emails/confirmation_email.tpl.php
Код: php
<td><b><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?>:</b>

Пожалуйста, помогите в этом вопросе или подскажите где копать.
*

fsv

  • Moderator
  • 2787
  • 413 / 2
в confirmation_email.tpl.php  посмотрите, что из себя представляет переменная $order_shipping , давно было, могу ошибаться, вроде как она составная. Получите из нее переменную, которую можно проверить на "самовывоз" (возможно, по id способа платежа, т.к. название в админке изменить легче, чем id в базе).
Далее смотрите адресные блоки кода. После
Код
if( $field->name == 'email') $field->name = 'user_email';
можно добавить
Код
if( "самовывоз" ){
    if( $field->name == 'поле_которое_надо_не_отсылать') continue;
}

Первое, что в голову пришло. Еще можно посмотреть формирование $registrationfields до передачи в шаблон письма.
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, но в этом случае поля "Адрес получателя" просто не будет в письмах при любых раскладах.
А нужно,  если поле "Адрес получателя" скрыто при оформлении заказа  - то и в письмах его нет.
А если не скрыто, то соответственно покупатель это поле заполняет и оно будет присутствовать в письмах
« Последнее редактирование: 06.10.2015, 17:33:07 от sashgera »
*

fsv

  • Moderator
  • 2787
  • 413 / 2
Я так понял, что поле скрывается, и его не надо в письмо только при самовывозе. Поэтому и предложил проверять в шаблоне письма на этот вид доставки, если он, поле не выводится. Там поля в цикле выводятся, в данном случае его вывод будет пропущен, хотя оно в переменной будет всегда. Почему при любом раскладе? Пробовали?
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, как получить переменную из $order_shipping проверить на "самовывоз" я не знаю. Сможете помочь?
Пробовал так, по значению value "Самовывоза":
Код: javascript
if( "standard_shipping%7C%D0%A1%D0%B0%D0%BC%D0%BE%D0%B2%D1%8B%D0%B2%D0%BE%D0%B7%7C%D1%81%D0%BE+%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%7C0.00%7C3" ){
    if( $field->name == 'vm_myadres') continue;
}
но поле "Адрес получателя" в письмах скрыто, при любом варианте доставки
*

fsv

  • Moderator
  • 2787
  • 413 / 2
но поле "Адрес получателя" в письмах скрыто, при любом варианте доставки
потому что сейчас: "если true, пропускаем" (всегда)

Над первым foreach адресных полей:
Код
$ship_info_arr = explode("|", $db->f("ship_method_id") );

Просмотрите полученный массив (потом это удалите!):
Код
echo '<pre>'.print_r($ship_info_arr, true).'</pre>';
Найдите для самовывоза уникальный элемент массива. Пусть это будет второй элемент "Самовывоз", класс доставки может повторяться (не уникальный).
Только если вы в админке измените название доставки, все накроется. Для надежности можете запрос в базу на получение id этой доставки написать.

Тогда там, где выше написал:
Код
if( $ship_info_arr[1] == "Самовывоз" ){
    if( $field->name == 'vm_myadres') continue;
}
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, спасибо, все получилось.
к Самовывозу добавил еще одно поле
повторил все тоже самое для Доставки по Москве, здесь только одно поле в письме выводить не нужно
Код: php
$ship_info_arr = explode("|", $db->f("ship_method_id") );
$ship_info_arr2 = explode("|", $db->f("ship_method_id") );

foreach( $shippingfields as $field ) {
   if( $field->name == 'email') $field->name = 'user_email';

   if( $ship_info_arr[1] == "Самовывоз" ){
      if( $field->name == 'vm_myadres') continue;
      if( $field->name == 'vm_pasport') continue;
   }
   if( $ship_info_arr2[1] == "Доставка по Москве" ){
      if( $field->name == 'vm_pasport') continue;
   }

Только если вы в админке измените название доставки, все накроется. Для надежности можете запрос в базу на получение id этой доставки написать.
Вывод полей в письмах пропускаться не будет? Или сайт накроется?
Мне очень неудобно спрашивать – а как сделать запрос в БД на получение id доставки?

*

fsv

  • Moderator
  • 2787
  • 413 / 2
Вот это
$ship_info_arr = explode("|", $db->f("ship_method_id") );
$ship_info_arr2 = explode("|", $db->f("ship_method_id") );
масло масляное, не надо. На просмотр оба массива, и вы увидите, что они одинаковые. В каждом заказе $db одна.
Один раз получаете массив, в обоих проверках его используете.

Сайт не накроется, поля выводится начнут. Запрос - смотреть надо.

Забыл, шаблон письма в utf-8 без бум, иначе проверка на совпадение с кириллической строкой не пройдет. Но раз получилось, и сами знаете.
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, внес изменения:
Код: php
$ship_info_arr = explode("|", $db->f("ship_method_id") );

if( $ship_info_arr[1] == "Самовывоз" ){
  if( $field->name == 'vm_myadres') continue;
  if( $field->name == 'vm_pasport') continue;
}
if( $ship_info_arr[1] == "Доставка по Москве" ){
  if( $field->name == 'vm_pasport') continue;
}
ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
Например
Код: php
if( $ship_info_arr[1] == "Доставка по Москве" ){
на
Код: php
if( $ship_info_arr[1] == "Доставка по МО" ){
*

fsv

  • Moderator
  • 2787
  • 413 / 2
ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
да
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, спасибо, вы мне здорово помогли!
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, у меня еще вопрос, если сможете, пожалуйста, помогите
В письмах, название товара сделал ссылкой:
Код: php
<?php
$q  = "SELECT product_id FROM #__{vm}_product WHERE product_name='".$dboi->f("product_name")."'";
$db->query($q);
$db->next_record();
$product_id = $db->f("product_id");
?>
<tr class="Stil1">
<td><?php echo $my_qty ?></td>
<td><a href="http://www.МойСайт/component/virtuemart/?page=shop.product_details&product_id=<?php echo $product_id ?>"><?php $dboi->p("product_name")?> <?php echo ($dboi->f("product_attribute")? ' ('.$dboi->f("product_attribute").')' : ''); ?></a></td>

Название товара получилось ссылкой, но поля стали скрываться только в письмах покупателя, а в письмах админа - нет.



если запрос делаю так (изменяю 3-ю строку), то поля скрываются и у покупателя, и у админа, но ссылка получается одинаковой для всех товаров (если в корзине было более одного товара):
Код: php
<?php
$q  = "SELECT product_id FROM #__{vm}_product WHERE product_name='".$dboi->f("product_name")."'";
$db->query(); //изменяю 3-ю строку
$db->next_record();
$product_id = $db->f("product_id");
?>
« Последнее редактирование: 25.10.2015, 20:58:03 от sashgera »
*

fsv

  • Moderator
  • 2787
  • 413 / 2
Вы пытаетесь получить id товара. Он известен, внутри цикла  while($dboi->next_record()) {...}
Код
$prid=$dboi->f("product_id");

Вот откопал вариант письма, более чем 2,5-годичной давности. Там есть ссылка на товар.
Не для копипаста! Там перепиленный вариант под конкретную ситуацию. Но ссылку на товар рассмотреть при желании можно.

Спойлер
[свернуть]

Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
сделал так, теперь есть и ссылка товара и скрываются поля
Код: php
<td>
<?php
$prid=$dboi->f("product_id");
$mydb = &JFactory::getDBO();         
$mydb->setQuery("SELECT product_name FROM #__vm_product WHERE product_id=(SELECT product_parent_id FROM #__vm_product WHERE product_id=$prid)");
?>       
<a href="<?php echo JURI::root(); ?>/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=<?php echo $prid ?>"><?php $dboi->p("product_name")?> <?php echo ($dboi->f("product_attribute")? ' ('.$dboi->f("product_attribute").')' : ''); ?></a></td>

fsv, большое спасибо! Вы меня снова выручили
*

fsv

  • Moderator
  • 2787
  • 413 / 2
это, вроде, как ни к чему тут:
Код
$mydb = &JFactory::getDBO();         
$mydb->setQuery("SELECT product_name FROM #__vm_product WHERE product_id=(SELECT product_parent_id FROM #__vm_product WHERE product_id=$prid)");
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, все понял, еще раз спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Уведомление о заказе в зависимости от варианта доставки

Автор baltazors

Ответов: 0
Просмотров: 3914
Последний ответ 07.06.2017, 11:44:10
от baltazors
Сделать название товара ссылкой в письмах о заказе

Автор sashgera

Ответов: 0
Просмотров: 1363
Последний ответ 19.10.2015, 14:15:17
от sashgera
Дополнительное поле с информацией о доставке

Автор sashgera

Ответов: 19
Просмотров: 1684
Последний ответ 10.02.2015, 20:48:38
от sashgera
[Решено]Краткая информация о товаре в письме о заказе пользователю

Автор mcross

Ответов: 1
Просмотров: 1436
Последний ответ 04.10.2012, 14:47:00
от mcross
Глюк на странице информации о заказе

Автор nextvid

Ответов: 1
Просмотров: 1571
Последний ответ 15.08.2011, 10:56:00
от d0ublezer0