Хак FxField [DLE 10.2 - 10.x]

Тема в разделе "DLE", создана пользователем Gameer, 24 июл 2015.

Информация :
Актуальная версия DataLife Engine 11.1
( Final Release v.11.1 | Скачать DataLife Engine | Скачать 11.1 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    fixxf.png
    После некоторых манипуляций, я достиг повышения точности поиска новостей по доп полям.

    Установка :
    Ищем в файлах /engine/modules/show.short.php, /engine/modules/show.custom.php и два раза /engine/modules/show.full.php
    PHP:
    $value3[] = "<a href=\"" $config['http_home_url'] . "xfsearch/" urlencode$value2 ) . "/\">" $value2 "</a>";
    Заменяем на:
    PHP:
    $value3[] = "<a href=\"" $config['http_home_url'] . "xfsearch/" $preg_safe_name "/" urlencode$value2 ) . "/\">" $value2 "</a>";
    Далее открываем файл /engine/engine.php находим :
    PHP:
    "xfsearch/"
    Меняем на :
    PHP:
    "xfsearch/" urlencode($xn) . "/"
    Далее находим :
    PHP:
    $xf = @$db->safesql
    Выше вставляем :
    PHP:
    $xn = @$db->safesql htmlspecialchars strip_tags stripslashes trim $_GET['xn'] ) ) ), ENT_QUOTES$config['charset'] ) );
    Далее находим :
    PHP:
    xfields LIKE '%{$xf}%'
    Меняем на :
    PHP:
    SUBSTRING_INDEXSUBSTRING_INDEXxfields,  '{$xn}|', -) ,  '||'LIKE '%$xf%'
    Далее открыть .htaccess (там где index.php) найти :
    PHP:
    RewriteRule ^xfsearch/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$[L]
    RewriteRule ^xfsearch/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$[L]
    И заменить на :
    PHP:
    RewriteRule ^xfsearch/([^/]*)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$[L]
    RewriteRule ^xfsearch/([^/]*)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$[L]
    На этом все.
     
    Последнее редактирование: 25 июл 2015
    DomiTori, killoff и E-body нравится это.
  2. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Это также удаляет xfsearch в ссылках... Где результат вживую можно посмотреть?
     
  3. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    Лично проверял на DLE 10.5 на локале. Проблема была в том что раньше в DLE искало по всем значениям в xfields а теперь только в том что ищем.

    Можете протестировать на локале, создать два разных доп поля, к примеру (год начала 2015 год окончания 2016 а в другой новости год начала 2016 а окончания 2017 (или 2015) ) и увидите что ищет только по том полю что перешли, а до этого взяло бы две новости по 2016 году ибо там и там есть это значение.
     
    E-body нравится это.
  4. DomiTori

    DomiTori Постоялец

    Регистр.:
    15 июл 2015
    Сообщения:
    72
    Симпатии:
    60
    Опробую конечно еще раз, на faq писал , не работало у меня, поиск по категориям и доп полям ломался.
     
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.035
    Симпатии:
    2.034
    Вам уязвимостей чтоль мало?
    PHP:
    {$_GET['xn']}
    За одну эту строчку руки оторвать! Кто $_GET пихает в запросы??? И мне реально пофиг что там ещё делается с ним...

    $_GET/$_POST должны проходить либо через intval(), либо через mysql_real_escape_string() и никоем образом ещё...

    Пока мне кто-нибудь не докажет, что строчка ниже безопасна для выполнения на SQL - тему удалить!
    Код:
    $sql_select = "SELECT SQL_CALC_FOUND_ROWS p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$_GET['xn']}|', -1 ) ,  '||', 1 ) LIKE '%$xf%' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
     
    Attyla, Viodele и E-body нравится это.
  6. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    И да и нет. Код поправил.
     
  7. inmy

    inmy

    Регистр.:
    13 апр 2012
    Сообщения:
    296
    Симпатии:
    200

    прежде чем что либо делать,обратись на php.net и функциям оптимизации.а уязвимость не убрал,что уж там
     
    Attyla нравится это.
  8. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    Ой,ой. Хорошо, побежал изучать.

    Это не мой запрос с SQL_CALC_FOUND_ROWS, я его лишь дополняю, это пишите к разработчикам CMS.
     
  9. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.035
    Симпатии:
    2.034
    Вооот.. Теперь можно обсуждать скорость работы и прочее...
    На самом деле, можно было бы обойтись $db->safesql - этого уже достаточно для безопасной вставки в SELECT, но тут лучше перебдетть...
     
    Attyla нравится это.
  10. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Только у меня при таком коде в htaccess слетают категории? Кто-нибудь вообще код проверял?
     
    Горбушка нравится это.
Статус темы:
Закрыта.