Abo 5.1. Возможность запалить скрипт.

Тема в разделе "ABO CMS", создана пользователем garisson, 12 сен 2009.

Статус темы:
Закрыта.
  1. garisson

    garisson Создатель

    Регистр.:
    25 апр 2008
    Сообщения:
    36
    Симпатии:
    5
    На днях перебирал скрипт abo 5.1. Файл классов main и core под зендом. Решил продезендить, посмотреть можно ли на скорую руку отдебажить. Естественно код там черт ногу сломит. Но один момент заставил задуматься:

    Метод getPage класса core, строчки:
    PHP:
    if ( "abocms_version" == $link )
            {
                exit( 
    "ABOCMS ".ABOCMS_VERSION."<br>Р'С_РчР_С_ РїР_С_Р>РчР_Р_РчР_Р_ РёР·Р_РчР_РчР_РёС_ С"айР>Р°".date( "d F Y H:i:s.", filemtime( __FILE__ ) ) );
            }
    Если ваша abo у вас под рукой сделайте в браузере запрос на адрес:
    http://sait.ru/abocms_version
    Получим ответ в браузер:
    Код:
    ABOCMS ABOCMS_VERSION
    Время последнего изменения файла: 22 April 2009 13:53:16.
    Думаю но комментс- палево.
    Теперь как можно спасти задницу:
    Вырезать из зенда такую вещь для меня оказалось нереальным (может есть умельцы?)))).
    Поэтому осталось соорудить новый класс с методом getPage в отдельном файле:
    Назовем этот файл например class.Sistem.php с классом Sistems и положим в папку со всеми классами (по умолчанию у вас inc).
    Думаю люди здесь не глупые примитивный конструктор класса соорудят.
    Теперь метод getPage
    PHP:
        public function getPage$link )
        {
            global 
    $CONFIG;
            global 
    $lang;
            global 
    $server;
            global 
    $db;
             
    $by $CONFIG['rewrite_mod'] ? "address" "link";
            if ( 
    $link )
            {
                
    $link $db->escapestrtolowersubstr$link0100 ) ) );
                if ( 
    $CONFIG['rewrite_mod'] )
                {
                    
    $dir  false != ( $link_slash strrpos$link"/" ) ) ? substr$link$link_slash ) : $link;
                    if ( !
    strpos$dir"." ) )
                    {
                        
    $link .= "/";
                    }
                    
    $link str_replace"//""/"$link );
                    
    $arr_dir explode"/"$link );
                    if ( empty( 
    $arr_dir[sizeof$arr_dir ) - 1] ) )
                    {
                        unset( 
    $arr_dir[sizeof$arr_dir ) - 1] );
                    }
                    
    $dir_count sizeof$arr_dir );
                    for ( 
    $i 0$i $dir_count; ++$i )
                    {
                        
    $dir_list[] = implode"/"$arr_dir )."/";
                        unset( 
    $arr_dir[sizeof$arr_dir ) - 1] );
                    }
                    
    $link implode"\", \""$dir_list );
                }
                
    $ret db_loadresult2"SELECT p.*, pt.*, p.id as id, pt.id as tpl_id, IF(ISNULL(p.parent_id),0,1) as pid FROM ".$server.$lang."_pages as p, ".$server.$lang."_pages_templates as pt WHERE ".$by." IN (\"".$link."\") AND pt.id = p.tpl_id ORDER BY LENGTH(".$by.") DESC LIMIT 0,1" );
                
    $ret['params'] = $CONFIG['rewrite_mod'] ? substr$dir_list[0], strlen$ret[$by] ) ) : "";
            }
            else
            {
                
    $ret db_loadresult2"SELECT p.*, pt.*, p.id as id, pt.id as tpl_id, IF(ISNULL(p.parent_id),0,1) as pid FROM ".$server.$lang."_pages as p, ".$server.$lang."_pages_templates as pt WHERE is_default = 1 AND  pt.id = p.tpl_id ORDER BY page_rank DESC" );
                if ( 
    < !count$ret ) )
                {
                    
    $query "SELECT p.*, pt.*, p.id as id, pt.id as tpl_id, IF(ISNULL(p.parent_id),0,1) as pid FROM ".$server.$lang."_pages as p, ".$server.$lang."_pages_templates as pt WHERE parent_id = 0 AND  pt.id = p.tpl_id ORDER BY page_rank DESC";
                    
    $ret db_loadresult2$query );
                    
    $ret['params'] = "";
                }
            }
            
    $ret['params'] = substr$ret['params'], 0, -);
            if ( 
    $ret['params'] )
            {
                
    $dir false != ( $link_slash strrpos$ret['params'], "/" ) ) ? substr$ret['params'], $link_slash ) : $ret['params'];
                if ( !
    strpos$dir"." ) )
                {
                    
    $ret['params'] .= "/";
                }
                
    $preg_result = array();
                @
    preg_match"~(?:([a-z0-9_/-]+)(?:/))?(?:([a-z0-9_-]+)(?:\\.html))?~i"$ret['params'], $preg_result );
                if ( 
    sizeof$preg_result ) )
                {
                    
    $ret['dop_params'] = $preg_result;
                }
            }
            return 
    $ret;
        }
    Подключаем класс к движку:
    Открываем файл common.php в корне движка и после
    Код:
    require_once(RP.$CONFIG['inc_path'].'func.str.php'); 
    вставим:
    Код:
    require_once(RP.$CONFIG['class_path'].'class.Sistem.php');
    $cms	= new Sistems;	
    Далее index.php
    Ищем:
    Код:
    if (!$CONFIG['multilanguage'] && $_REQUEST['lang'] != $CONFIG['default_lang']) {
        $ret = $core->getPage($_REQUEST['lang'].$request_link);
    } else {
    	$ret = $core->getPage($request_link);
    }
    Заменяем:
    Код:
    if (!$CONFIG['multilanguage'] && $_REQUEST['lang'] != $CONFIG['default_lang']) {
        $ret = $cms->getPage($_REQUEST['lang'].$request_link);
    } else {
    	$ret = $cms->getPage($request_link);
    }
    Теперь реакции на http://sait.ru/abocms_version будет либо пустая страница либо 404, как настроите.
    Пока что все что удалось найти глобального.
    Естественно 2 строчки в админке я думаю все сами в состоянии исправить и это не надо описывать.
    Код:
    $page_title = 'ABO.CMS: '.$title;
    и
    '_ROOT.abocms_version'			=> ABOCMS_VERSION,
    


    Теперь по поводу самой системы несколько слов:
    В принципе система хорошая, с поддержкой drag and drop в админке (что очень радует).
    В качестве шаблонизатора: TemplatePower от templatepower.codocad.com (кстати кому надо мануалы с примерами на сайте имеются). Конечно шаблонизатор не шибко быстрый но в принципе для среднего сайта тянет.
    Ajax c возможностью закачки файлов был взят с http://dklab.ru/lib/JsHttpRequest/. В принципе тоже оптимальное решение.
    Поиск по сайту организован http://risearch.org/rus/index.html.

    Система удобна для сайтов типа визитка, с возможностью сделать каждую страницу сайта полностью уникальной. Для новостных порталов к сожалению слабовата и достаточно неудобна (тут я отдаю предпочтение dle).
     
  2. El_Magnifico

    El_Magnifico Команданте

    Регистр.:
    1 сен 2006
    Сообщения:
    653
    Симпатии:
    488
    уже по этому вопросу наговорено и переговоренно много чего...

    даже если ты уберешь эту переменную - або выдаст себя при выдаче в ПС. так что смысла нет - ее надо переписывать...

    я пытался собрать людей для этого вопроса
    но народа набралось крайне мало

    поэтому каждый ее переписывает индивидуально!
     
Статус темы:
Закрыта.