Как стать автором
Обновить

Комментарии 49

Поздравляю с релизом.

Хотелось бы поинтересоваться о будущем проекта.
Какие планы на развитие? Промежуток между последнем релизом 4 года. На сколько актуальная версия 2 по нынешним стандартам?
Как вы планируете дальнейшее развитие?
Что сладкого готовите на ближайшее будущее?
ort и команда, поздравляю.
Я просто оставлю это здесь в качестве демонстрации уровня ответственности топикстартера и поддержки предыдущих версий



(плюс ещё две потенциальных sql-инъекции, но эксплуатировать их извне без сторонних плагинов нельзя, поэтому меня послали)


К слову, пароли даже в версии 2.0 (сейчас проверил по гитхабу) хэшируются в обычный md5 даже без соли. В 2017 году, ага.

В общем, народ, не используйте LiveStreet для мало-мальски серьёзных сайтов.
Спасибо за информацию

Код на github, уже бы pull request-ов неделали...

Тут нужно всё выкидывать и переписывать с нуля. На питоне.))
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Ну вы же уже запатчили себе именно этот код. Осталось совсем чуть чтобы сделать pull request и помочь продукту, который сами и используете. Да и профит будет — обновляться проще.

Или я не верно понял и этот некий "табун" не ваш?

Не я, и я его к счастью не использую)
А почему те, кто запатчили, не делали пулл-реквестов — этого уже знать не могу

Наплюсил в карму за факт репорта. Но вообще на тему безопасности принято сообщать сначала не в публичном месте, а потом уж, если не реагируют совсем, можно и публично.

Если приглядеться, можно заметить на скриншотах личку и 2014 год)

Shame on me :)

Лет несколько...

Поздравляю! :)
Осталась очередь за авторами плагинов и шаблонов перевести на новую версию движка…
PSR-2 — хорошо, а PSR-4?
А почему бы не вынести framework за пределы public директории в 2017 году?
А почему бы не использовать неймспейсы PSR-4 в 2017 году?
А почему бы не использовать нормальное оформление кода PSR-2 в 2017 году?
А почему бы не использовать prepeared statements в ORM в 2017 году?
Дальше смотреть не хочется…
Для тех, кто скажет, что PSR-2 заявлен во второй версии просто процитирую перевод стандарта.
Имена методов ДОЛЖНЫ быть объявлены с использованием т.н. «camelCase» (первое слово пишется в нижнем регистре, далее каждое слово начинается с большой буквы, а между словами нет разделителей).


В коде все методы начинаются с заглавной.
Предполагал, что это дело PSR-1
Здесь же просто форматирование кода по PSR-2

PSR-2 обязывает использовать PSR-1. Вообще, переводите уж всё на PSR-12. Как закончите, возможно, его примут :)

это да, обязывает )
Вообще, переводите уж всё на PSR-12. Как закончите, возможно, его примут :)
боюсь тогда будет уже какой-нибудь PSR-20 )

Ну, пока не планируется, да и 12-ый не быстро продвигается.

НЛО прилетело и опубликовало эту надпись здесь
Копирую из исходного кода Livestreet 2.0 без изменений
Скрытый текст
/**
 * Объект маппера для работы с БД
 *
 * @package application.modules.topic
 * @since 1.0
 */
class ModuleTopic_MapperTopic extends Mapper
{
    /**
     * Строит строку условий для SQL запроса топиков
     *
     * @param array $aFilter Фильтр
     * @return string
     */
    protected function buildFilter($aFilter)
    {
        $sDateNow=date('Y-m-d H:i:s');
        $sWhere = '';
        if (isset($aFilter['topic_date_more'])) {
            $sWhere .= " AND t.topic_date_publish >  " . $this->oDb->escape($aFilter['topic_date_more']);
        }
        if (isset($aFilter['topic_slug'])) {
            $sWhere .= " AND t.topic_slug =  " . $this->oDb->escape($aFilter['topic_slug']);
        }
        if (isset($aFilter['topic_publish'])) {
            $sWhere .= " AND t.topic_publish =  " . (int)$aFilter['topic_publish'] . " AND t.topic_date_publish <= '{$sDateNow}' ";
        }
        if (isset($aFilter['topic_rating']) and is_array($aFilter['topic_rating'])) {
            $sPublishIndex = '';
            if (isset($aFilter['topic_rating']['publish_index']) and $aFilter['topic_rating']['publish_index'] == 1) {
                $sPublishIndex = " or topic_publish_index = 1 ) and ( topic_skip_index = 0 and b.blog_skip_index = 0 ";
            }
            if ($aFilter['topic_rating']['type'] == 'top') {
                $sWhere .= " AND ( t.topic_rating >= " . (float)$aFilter['topic_rating']['value'] . " {$sPublishIndex} ) ";
            } else {
                $sWhere .= " AND ( t.topic_rating < " . (float)$aFilter['topic_rating']['value'] . "  ) ";
            }
        }
        if (isset($aFilter['topic_new'])) {
            $sWhere .= " AND t.topic_date_publish >=  '" . $aFilter['topic_new'] . "'";
        }
        if (isset($aFilter['user_id'])) {
            $sWhere .= is_array($aFilter['user_id'])
                ? " AND t.user_id IN(" . implode(', ', $aFilter['user_id']) . ")"
                : " AND t.user_id =  " . (int)$aFilter['user_id'];
        }
        if (isset($aFilter['blog_id'])) {
            if (!is_array($aFilter['blog_id'])) {
                $aFilter['blog_id'] = array($aFilter['blog_id']);
            }
            $sBlogList = join("','", $aFilter['blog_id']);
            $sWhere .= " AND ( t.blog_id IN ('{$sBlogList}') ";
            $sWhere .= " OR t.blog_id2 IN ('{$sBlogList}') ";
            $sWhere .= " OR t.blog_id3 IN ('{$sBlogList}') ";
            $sWhere .= " OR t.blog_id4 IN ('{$sBlogList}') ";
            $sWhere .= " OR t.blog_id5 IN ('{$sBlogList}') ) ";
        }
        if (isset($aFilter['blog_type']) and is_array($aFilter['blog_type'])) {
            $aBlogTypes = array();
            foreach ($aFilter['blog_type'] as $sType => $aBlogId) {
                /**
                 * Позиция вида 'type'=>array('id1', 'id2')
                 */
                if (!is_array($aBlogId) && is_string($sType)) {
                    $aBlogId = array($aBlogId);
                }
                /**
                 * Позиция вида 'type'
                 */
                if (is_string($aBlogId) && is_int($sType)) {
                    $sType = $aBlogId;
                    $aBlogId = array();
                }

                $aBlogTypes[] = (count($aBlogId) == 0)
                    ? "(b.blog_type='" . $sType . "')"
                    : "(b.blog_type='" . $sType . "' AND t.blog_id IN ('" . join("','", $aBlogId) . "'))";
            }
            $sWhere .= " AND (" . join(" OR ", (array)$aBlogTypes) . ")";
        }
        if (isset($aFilter['topic_type'])) {
            if (!is_array($aFilter['topic_type'])) {
                $aFilter['topic_type'] = array($aFilter['topic_type']);
            }
            $sWhere .= " AND t.topic_type IN (" . join(",",
                    array_map(array($this->oDb, 'escape'), $aFilter['topic_type'])) . ")";
        }
        return $sWhere;
    }
}

И это у них называется ORM, ага
Справедливости ради, в 2.0 это, если верить грепу, единственное такое место, в 1.0.3 такого было побольше
Это называется старый код, ORM есть во фреймворке и используется только в части проекта.
Весь код мы не переписывали, иначе бы и этого бы не было.
Код проекта ни на что не претендует, модных штук (фреймворки, контейнеры и прочее) не использует. Как-то так.

Конкретно это место, конечно, стоило бы переписать. С виду вроде всё проэкранировано, но уверенности всё равно нет.

Как уже выше заметили, это такое одно (надеюсь) сильно запущенное место по части sql. Перевод на ORM потянет за собой кучу entity с переписываем большого пласта кода. Не рискнули.
Можно было бы хотя бы для приличия // TODO: переписать этот говнокод воткнуть.)

А тот ORM, который EntityORM, страшненький, неудивительно что не хочется его юзать. (Вообще, по моим грубым оценкам, CMS такого уровня можно накатать с нуля месяца за три, если не стесняться пользоваться сторонними батарейками.)

Оптимистичные прикидки — они всегда такие ;)

Они основаны на реальном времени разработки двух лайвстритоподобных сайтов, в связи с чем чуть ближе к реальности чем обычно)
Ну одно дело сделать «лайвстритоподобный» сайт, другое дело кастомизируемый open source, где уже твой говнокод будут видеть и другие
Лайвстритоподобность подразумевает кастомизируемость, да
Я только рад таким профессионалам, побольше бы
Дядь, сделай уже, а? Покажи как надо пилить, а то только одни разговоры ;)
Поздравляю с релизом! Нравится мне этот движок.
Увидел новость — обрадовался. Движок нравится, версию 2 уж и не ждал, а тут такой сюрприз.
Но после каментов озадачился, что-то сильно ругаете его…
Таки имеет смысл переходить на 2.0 (для новых сайтов) или лучше проверенную 1.0.3 использовать?
Если выбирать между 1.0.3 и 2.0, то 2.0 определённо лучше
Спасибо
Че там? Админку нормальную сделали? Все так-же тормозит как и 3 года назад? Или можно смотреть без боли?
А как оно в сравнении с инстансцмс?
Судя по количеству ошибок php7cc совместимости с php7 нет?
Или как с первой версией, LS заработает только после сильной правки модуля базы данных?
юзаю на локалке php7, ls2 полёт нормальный

Работает из коробки? Php7 или 7.1?

из коробки, 7.0. щас проверю на 7.1
7.1, всё работает. локалка (win10, apache+nginx)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации