К содержанию

FastSnippet - работа со сниппетами через AJAX



И снова всем привет, от L I T O S H! Это мой второй официальный компонент. Неожидал, что на modx.pro будет такая поддержка, несмотря на мой прошлый платный компонент. Благодарность 6-и человекам, лайкнувшим и поддержавшим мой предыдущий пост. Спасибо, мне приятно =) В этот раз компонент будет бесплатный и я уверен, очень нужный.

Позволяет подключаться к сниппетам через AJAX.

Преимущества:
— Быстрая установка и подключение к сниппетам
— Можно отправлять, как GET, так и POST запросы
— Легко вписать url в AJAX
— Доступны только те сниппеты, которые вы разрешили в настройках
— Можно обращаться к сниппетам прямо из консоли браузера
— Попутно можно передавать свои данные. К примеру, если это комментарий, то просто добавляете в параметре data свой параметр. И на стороне сниппета уже ловите через $_POST (если кто не знает). Пример: myparam: 'work'. Также доступна сериализация, ничто не мешает передавать данные быстро через массив =)

Инструкция:
1) Установить пакет
2) Заходим в «Системные настройки», выбираем наш компонент и прописываем все наши сниппеты через запятую, которые нам нужны для работы.
3) Добавляем [[+fastsnippet.js]] выше всех скриптов в HEAD всех страниц, которые будут использоваться для подключения к сниппетам.
4) Вот и все. Осталось научиться подключаться через AJAX к нашем сниппетам. Для этого в AJAX-запросе нужно передать значение "url" — указываем fastsnippet. В значении "data" прописываем название сниппета: snippet: 'test' и его параметры (если нужно): params: { limit: 1, sortdir: 'desc' }.
5) Примечание: при отправке параметров они будут доступны в виде переменной в сниппете. Пример: $limit

Пример:
$.ajax({
        url: fastsnippet,
        type: "post",
        data: {
            snippet: 'test',
            params: {
                limit: 1,
                sortdir: 'desc'
            },
            myparam: 'work'
        }
    })

ModStore: https://modstore.pro/packages/utilities/fastsnippet
L I T O S H
L I T O S H
01 ноября 2020, 05:43
modx.pro
2 569
Поблагодарить автора Отправить деньги
Реклама

Комментарии: 73

Павел Гвоздь
Павел Гвоздь Эксперт
01 ноября 2020, 08:13
Логика инсталляции как-то усложнена по-моему. В чём принципиальное отличие от AjaxSnippet? Кроме более сложного подхода в использовании, конечно. =)

UPD:
Всё, сорри, понял. Это в принципе другой компонент, позволяющий «вызывать» сниппеты через Ajax запросы. Ок.
    L I T O S H
    L I T O S H Старожил
    01 ноября 2020, 08:21
    Да, правильно понял) Усложнена — потому что некоторые за безопасность боятся. Не могу же я все сниппеты открыть, хоть и вначале продумывал и такой вариант. Человек сам выбирает какие сниппеты включить. И не нужно создавать лишнюю страницу отдельную (пример: /get), чтобы словить запросы ajax и передаит в сниппеты. Они как бы скрытыми получаются от менеджеров и владельца сайта.
      Павел Гвоздь
      Павел Гвоздь Эксперт
      01 ноября 2020, 08:32
      По безопасности там отдельная тема – ниже написал. А касательно допуска только определённых сниппетов, не значит, что это безопасно. Ответственный программист может и позаботится о том, насколько безопасно давать доступ к тому или иному сниппету. А вот учитывая то, что я вижу на клиентских сайтах, большинство, к сожалению, не являются ответственными программистами и если потребуется, без раздумья дадут доступ к тому-же pdoResources. Представь, что можно натворить из фронта, имея доступ к pdoResources и имея возможность указывать туда любые параметры для вызова.
        L I T O S H
        L I T O S H Старожил
        01 ноября 2020, 08:41
        Знаешь, вот сколько времени на modx, каждый раз такая мысль была — а как к сниппетам то обращаться с AJAX'a? Вроде бы modx'у уже больше 8 лет по моему, а норм решения так и не придумали. Мое дело — предложить, но возможно есть и обратная сторона, которую я сократил в меру своих возможностей. Но я считаю, что если боятся — то modx, так и останется «позади» всех. Хотя это супер платформа. Wordpress ей в подметки не годится по скорости и прочим фишкам, которые мы все любим. Вот я и хочу и тем самым улучшаю ее за бесплатно в том числе =)
          Павел Гвоздь
          Павел Гвоздь Эксперт
          01 ноября 2020, 08:45
          Ты о чём вообще? Не надо равняться на WP при внедрении решений, это чревато вот такими дырами в безопасности. Если надо обращаться к своему сниппету – пиши кастом.
            L I T O S H
            L I T O S H Старожил
            01 ноября 2020, 08:47
            я о том, что по статистике CMS, Wordpress занимает бОльшую долю
              Павел Гвоздь
              Павел Гвоздь Эксперт
              01 ноября 2020, 08:48
              Ну и хрен с ним. При чём тут это? Мы сейчас обсуждаем одно, а ты тянешь куда-то в другую сторону.
              L I T O S H
              L I T O S H Старожил
              01 ноября 2020, 08:50
              Пожалуйста =) прошу не ставить клеймо «дыра» на этот компонент. Нужен конструктив. В чем конкретно есть дыры? И как можно «взломать» компонент, если это просто проводник от браузера к сниппетам? Ответственность лежит в том числе на программисте, который пишет сниппет. Я сделал бесплатно. Никто не заставляет вас пользоваться им. Видите дыры? Отлично — будем исправлять, дорабатывать. Но пока не вижу в чем «дыра»
                Павел Гвоздь
                Павел Гвоздь Эксперт
                01 ноября 2020, 09:05
                Ну например, мне надо вывести статьи через Ajax на сайте при помощи сниппета pdoResources. Как это сделать с помощью данного компонента безопасно, не прибегая к созданию дополнительных сниппетов?
                  L I T O S H
                  L I T O S H Старожил
                  01 ноября 2020, 09:09
                  Смотри, Павел. Чисто ради примера =) Я зашел на твой сайт и через браузер увидел какие заголовки отправляются и куда с помощью ajax'a. Соответственно, я получил всю ту же информацию, что и у меня в примере. В чем твоя безопасность?

                  $.ajax({
                  url: '/assets/components/xlike/action.php',
                  type:'post',
                  data: {
                      action: 'vote',
                      propkey: '33dcd0b9cd276482b2eb640de26ef3f8be82cf34',
                      parent: 128
                      value: 1
                  }
                  });
                    Павел Гвоздь
                    Павел Гвоздь Эксперт
                    01 ноября 2020, 09:11
                    Ты прикалываешь там чтоли? Я вопрос конкретный задал. При чём тут мой сайт?
                      L I T O S H
                      L I T O S H Старожил
                      01 ноября 2020, 09:12
                      Ясно, агрессия и не принятие аргументов. Молчу
                        Павел Гвоздь
                        Павел Гвоздь Эксперт
                        01 ноября 2020, 09:17
                        агрессия и не принятие аргументов
                        Лол, ахахаха)))))))))), куда я влез?) Ну давай, взломай меня.

                        При чём тут ajax запросы на моём сайте и дыра, которую ты откроешь, если дашь доступ к pdoResources из фронта, хер знает.

                        На вопрос мой ответ, умник))
    Павел Гвоздь
    Павел Гвоздь Эксперт
    01 ноября 2020, 08:28
    А давать на фронт возможность указывать любые параметры для обращения к сниппету разве правильно? Может лучше и безопаснее сделать указание параметров в бекенде (хз, в системной настройке пусть или где-то ещё) и к каждому сету параметров давать свой ключ, а на фронте обращаться к сниппету указывая ключ сета параметров, который будет в бекенде подтягиваться уже и применяться к вызову сниппета?
      L I T O S H
      L I T O S H Старожил
      01 ноября 2020, 08:37
      Возможно твоя идея имеет место быть. Но она слишком «тяжелая» или усложнена, как ты выражаешься для начинающих или особо не вникающих в modx =)
      Но я нормально так обдумал в меру своих возможностей на этот счет. Вот смотри, если на сайте доступен AJAX вызов, то любой человек, вне зависимости стоит мой компонент на сайте или нет, может точно также отправлять сколько угодно запросов в бэкэнд с любыми параметрами (т. е. дудосить =) ). И да, тоже думал на счет переменных (параметров, пример: $limit), что это не безопасно, но на самом деле это фактически тот же $_POST, который перезаписывается тотчас же, через строку при нормальной логике сниппета. И если бы я эту возможность убрал, нельзя было бы обращаться к примеру msProducts со своими параметрами, а такая возможность имеется.
      В любом случае можно доработать и как бы не против предложений, если вы видите где-то уязвимость =)
        Павел Гвоздь
        Павел Гвоздь Эксперт
        01 ноября 2020, 08:39
        если на сайте доступен AJAX вызов, то любой человек, вне зависимости стоит мой компонент на сайте или нет, может точно также отправлять сколько угодно запросов в бэкэнд с любыми параметрами
        Вот тут подробнее, пжл.
          L I T O S H
          L I T O S H Старожил
          01 ноября 2020, 08:44
          ну если AJAX доступен на сайте $.ajax({ });, то можно из консоли браузера отправлять свои запросы с параметрами. Любой человек может посмотреть какие параметры отправляются и подставить свои.
            Павел Гвоздь
            Павел Гвоздь Эксперт
            01 ноября 2020, 08:47
            Я не понимаю тебя. Ты пишешь сначала
            сколько угодно запросов в бэкэнд с любыми параметрами
            а теперь говоришь
            посмотреть какие параметры отправляются и подставить свои
            Я не вижу ничего страшного в этом.
          Павел Гвоздь
          Павел Гвоздь Эксперт
          01 ноября 2020, 08:42
          можно доработать и как бы не против предложений
          Я уже написал предложение.

          если вы видите где-то уязвимость
          Разве имея доступ к pdoResources сделать запрос к таблице modUser нельзя? Это так, навскидку. Я не хакер, у них голова работает гораздо интенсивнее в плане всяких SQL-инъекций.
        Николай Савин
        Николай Савин Администратор
        01 ноября 2020, 10:20
        Поставил минус — обязан объяснить.
        Этот компонент действительно дыра в безопасности.
        Доступ к, например, pdoResources позволяет получить любую информацию из любой таблицы, включая личные данные пользователей, заказы, промо-коды и любую другую коммерческую информацию. А также любые системные настройки, где часто хранятся логины-пароли к платежным системам, апишкам и т.п.

        Ответственный программист конечно улыбнется и не будет использовать такой компонент, но найдутся десятки неопытных ребят, которым надо проще и быстрее. А потом начнется… MODX дырявый
          L I T O S H
          L I T O S H Старожил
          01 ноября 2020, 10:26
          Ваше дело) pdoResources можно и не включать в «доступные». Точно также можно сказать, что это pdoResources дырявый. А сидеть без ajax'a в 2к20 по мне не очень для современных CMS. И сидеть сложа руки, не предложив альтернативы за 8 лет и говорить «фе… какой-то не очень» очень легко
            Николай Савин
            Николай Савин Администратор
            01 ноября 2020, 10:35
            Так не в этом дело что можно не включать. Это мы участники дискуссии понимаем.
            Проблема в том, что щас молодые неопытные увидят крутой компонент и без раздумья будут все подряд туда пихать.

            А сидеть без ajax'a в 2к20
            Сидеть на jquery в 2020 тоже так себе. Попахивает.

            Нет тут никакой альтернативы. Потому что подход в принципе неверный, ведущий только к плохому.
            ВСЕГДА на каждый необходимый функционал пишется свой отдельный запрос. Либо на коннектор, либо на плагин. И там уже вся логика, скрытая от посторонних глаз.
              L I T O S H
              L I T O S H Старожил
              01 ноября 2020, 10:42
              К какому плохому? Вы вообще о чем? Вы сказали — pdoResources, я сказал — недоступен он без разрешения. Или у вас хейт ради хейта? Если вы про молодых говорите, то у них есть своя голова. Мы тут делимся компонентами. И я уже словил двоих хейтеров, тупо без аргументации. Вы либо читайте, что ли, либо что. Там написано — без разрешения в настройках нет доступа.
                Николай Савин
                Николай Савин Администратор
                01 ноября 2020, 10:49
                тупо без аргументации
                Тебе уже два человека прямо на пальцах показали где проблема и к чему она может привести. Какая еще аргументация нужна.

                Не хочешь слушать — ради бога.
                  L I T O S H
                  L I T O S H Старожил
                  01 ноября 2020, 10:56
                  Я приемлю только прежде всего дружелюбную аргументацию в целях улучшить компонент, а не хейт без аргументации в целях загасить потенциал
                    Павел Гвоздь
                    Павел Гвоздь Эксперт
                    01 ноября 2020, 15:20
                    Ха, ты тоже увидел, какой автор неадекват?) Он приемлет только дружелюбную аргументацию, ибо остальное гасит потенциал, ёпта))))))
            Александр Мельник
            Александр Мельник Проверенный
            01 ноября 2020, 10:49
            Нет разницы как создан сниппет? — сниппет в базе данных, — статичный файл, — файловый элемент fenom (код отсутствует в базе), — через сторонние приложения, например gitModx (код отсутствует в базе)
              L I T O S H
              L I T O S H Старожил
              01 ноября 2020, 10:54
              Вызов происходит через
              $output = $modx->runSnippet('Welcome',array(
                 'name' => 'John'
              ));
              Если возможно вызвать ваш сниппет таким образом, то да =)
                Александр Мельник
                Александр Мельник Проверенный
                01 ноября 2020, 12:30
                скорее всего будет работать только для первых двух вариантов (классический и статические файлы). Потому как в случае если сниппет создан как файловый элемент, то вызывать его нужно
                $snippet = $modx->runSnippet('@FILE snippets/my_snippet.php', array('param' => 'value'));
                Вроде бы как можно в аякс вызов передавать не просто название сниппета, а всю строку @FILE snippets/my_snippet.php' но не факт, что такой вызов пройдет проверку, которая основана на системных настройках, я прав?
              Артур Шевченко
              01 ноября 2020, 11:42
              Почитал здешний холивар и должен всех поблагодарить. Автора за компонент, критиков за критику. Объясняю. Я уже давно использую вот эту заметку в тех случаях, когда нужен вызов сниппетов ajax после определенных действий пользователей, но только после прочтения комментариев критиков я задумался о том, что таким образом действительно можно ломануть сайт, хотя сам я всегда отправлял только те параметры которые мне нужны, а не все возможные, но среди них мог быть where. Поэтому считаю, надо этот момент исправить, вариант с созданием в админке набора параметров очень неплох, пусть это сложнее, чем передать параметры через js, но безопаснее ведь. Что для аргументов автора, то они немного противоречивы, с одной стороны он говорит что компонент для неопытных пользователей, а с другой что каждый программист сам должен блюсти безопасность сайт. Вот я неопытный, в сравнении конечно, и как писал выше, до текущего момента не думал что можно взломать сайт через ajax и pdoResources, и обсуждение новых компонентов читаю очень редко, поэтому мог просто установить и пользоваться не подозревая о подвохе. А критикам долен сказать, будь мягче, что вы нападаете на парня, он старался, а вы «дыра» «в топку», спокойно бы объяснили в чём проблема и как исправить и всё. Мы же тут как бы одно дело делаем, нельзя так.
                Павел Гвоздь
                Павел Гвоздь Эксперт
                01 ноября 2020, 15:27
                «Будь мягче» – это ты будешь своей девушке говорить. Тут вроде не детский сад. Если чел создал дыру, то нахера это называть иначе? Может ему ещё на психотерапевта скинуться? Говорю как есть. «Дыра в безопасности», предложил даже вариант, как это исправить. Вообще по-хорошему реализация должна быть что-то между AjaxSnippet и его подходом, таким образом не надо разрешать сниппеты в системных настройках, а можно было бы просто вызывать их через его компонент прямо на странице и указывать необходимые параметры прям при вызове. Но уже не стал ничего описывать, ибо он неадекватно отнёсся к критике, начал про какие-то аякс запросы на моём сайте рассказывать. Вот это было, кстати, особенно смешно. :)
                  Павел Гвоздь
                  Павел Гвоздь Эксперт
                  01 ноября 2020, 15:28
                  P.S. Нежные все стали, какие-то… когда тут всё начиналось, было гораздо жёстче и интереснее.
                    L I T O S H
                    L I T O S H Старожил
                    01 ноября 2020, 20:02
                    В чем «дыра» ответь, ты так и не ответил. Конкретно, в чем?
                  Александр Мельник
                  Александр Мельник Проверенный
                  01 ноября 2020, 16:01
                  не пойму я. Ладно человек написал код, который потенциально может быть небезопасным (хотя раз запуск того или иного сниппета необходимо подтвердить в системной настройке, то это уже говорит о том что человек думал о безопасности.)
                  А вот почему это приложение тогда появилось в официальном магазине? А то все накинулись на разрабочика, а мне кажется большая часть вины лежит на том, кто добавил это в магазин если код такой опасный.
                    Артур Шевченко
                    01 ноября 2020, 16:53
                    Я придумал простое решение проблемы. В магазине есть плашки предупреждающие о системных требованиях, пусть добавят плашку типа «Вызов некоторых снипеттов через этот компонент может быть использован злоумышленниками для взлома сайта».
                      L I T O S H
                      L I T O S H Старожил
                      01 ноября 2020, 20:01
                      Незачем это делать. Я так и не услышал в чем «дыра». Самый жесткий комментайрий — что типа кто-то подключит в сниппете pdoResources (хотя и эту теорию еще нужно проверить). Остальное треп
                        Павел Гвоздь
                        Павел Гвоздь Эксперт
                        01 ноября 2020, 20:03
                        Ты в мире с единорогами живёшь, чтоли? Тебе люди знающие говорят, что это дыра. «Теория», блин…
                          L I T O S H
                          L I T O S H Старожил
                          01 ноября 2020, 20:04
                          Говори, в чем «дыра»?
                            Павел Гвоздь
                            Павел Гвоздь Эксперт
                            01 ноября 2020, 20:05
                            Видимо, как минимум, в голове у тебя. Говорил уже. И не я один.
                              L I T O S H
                              L I T O S H Старожил
                              01 ноября 2020, 20:08
                              Опять без аргументов? норм
                      Павел Бигель
                      Павел Бигель Эксперт
                      01 ноября 2020, 17:20
                      В MODX парадигме AJAX запросы ведут в коннектор.
                      Делать AJAX запрос в сниппет, имхо, это прямой билет в дурку
                        L I T O S H
                        L I T O S H Старожил
                        01 ноября 2020, 19:51
                        Если ты не объяснишь в чем принципиальное отличие запроса в коннектор и просто в сниппет, то билет в дурку достается тебе.
                          Артем
                          Артем Старожил
                          02 ноября 2020, 01:08
                          в чем принципиальное отличие запроса в коннектор и просто в сниппет
                          Принципиальное отличие в том, что в коннекторе ты сам вызываешь нужный сниппет и сам передаешь ему параметры, поэтому сюрпризов там не будет, а в твоем случае ты просто запускаешь произвольный сниппет с произвольными параметрами.
                          Собственно, если в разрешенных сниппетах будет какой-нибудь pdoResources, то это будет аналогично этому коду:

                          $modx->exec($_REQUEST['snippet']);
                            L I T O S H
                            L I T O S H Старожил
                            02 ноября 2020, 01:18
                            Вы плохо читаете или понимаете? Если вы так уверены в этом, просто не ставьте pdoResources в разрешенные. Разрешаете вы, а не я. С какой стати я должен отвечать за то, что вы там понапишите/разрешите? Вообще кек, мои слова о поддержке на modx.pro забираю обратно. Но благодарность тем 6-и человекам все равно остается.
                              Артем
                              Артем Старожил
                              02 ноября 2020, 01:26
                              Вы плохо читаете или понимаете?
                              Ты решил поиграть в самого дерзкого или к чему ты мне это написал?

                              Если вы так уверены в этом, просто не ставьте pdoResources в разрешенные.
                              Я не собираюсь использовать твой компонент, который состоит из 30 так-себе-написанных строк, да и другим не советую этого делать.

                              Вообще кек, мои слова о поддержке на modx.pro забираю обратно.
                              Какие мы тут плохие, обидели бедняжку:(
                              Ну ты извини нас, мы дружно скачаем твой компонент и будем использовать на всех своих сайтах. Ведь это самый удобный и самый практичный способ работы с ajax.
                                L I T O S H
                                L I T O S H Старожил
                                02 ноября 2020, 01:31
                                Эй. Я тебя че заставляю? Сорян, если обидел братика, я даже грублю через Вы оказывается. Но ты здесь просто походу небо покоптить пришел, да? Потому что явно без весомых аргументов.
                                И да, не обижайся, я тоже могу ответить, если че так. И как следует. Особенно таким как вы, которые пишут ахинею по поводу и без.
                              L I T O S H
                              L I T O S H Старожил
                              02 ноября 2020, 01:22
                              А… стоп, понял. Вы ответили на вопрос в чем отличие, окей. Так значит отличие только в этом? И значит если какой-то прогер не знает о баге с pdoResources, поставит на коннектор этот вызов через ajax, то все — О май гад модыкс дырявый???
                                Артем
                                Артем Старожил
                                02 ноября 2020, 01:27
                                И значит если какой-то прогер не знает о баге с pdoResources,
                                Земля пухом коннектором, что еще тут скажешь.
                            Баха Волков
                            Баха Волков Администратор
                            01 ноября 2020, 20:42
                            Делать AJAX запрос в сниппет, имхо, это прямой билет в дурку
                            Не совсем понятно, как ты представляешь AJAX запрос в сниппет, я вот не представляю. У сниппетов в MODX появился постоянный url?)

                            Я код компонента не видел, но ясно что или коннектор, или какой-то плагин отлавливает запрос. Скажи если я не прав
                            Алексей Соин
                            Алексей Соин Проверенный
                            02 ноября 2020, 09:40
                            как минимум если разработчик разрешит использование сниппета в который можно передать tpl, то можно вывести любую системную настройку, вызвать любой другой сниппет, поменять что угодно на сайте, добавить админа и тд. Придумать можно очень много всего.
                              Павел Гвоздь
                              Павел Гвоздь Эксперт
                              02 ноября 2020, 10:05
                              Аргументируй нормально, блин, дружелюбно! Не гаси потенциал пацана.
                                L I T O S H
                                L I T O S H Старожил
                                02 ноября 2020, 10:06
                                Аргументируй нормально, блин, дружелюбно! Не гаси потенциал пацана.
                                Ты можешь вообще свалить отсюда
                                  Василий Наумкин
                                  Василий Наумкин Администратор
                                  02 ноября 2020, 10:32
                                  Ты тут всего 2 недели и уже раздаёшь советы кому свалить?

                                  Не надо так.
                                    L I T O S H
                                    L I T O S H Старожил
                                    02 ноября 2020, 10:37
                                    Без разницы сколько. Если мне человек не приятен, я ему скажу как нужно. Тем более первый начал бычить.
                                      Василий Наумкин
                                      Василий Наумкин Администратор
                                      02 ноября 2020, 10:41
                                      А ты мне неприятен, так что я тебя просто отключу — так это работает?

                                      Или будем пытаться жить дружно и не бычить на старожилов сообщества, в которое ты пришёл 2 недели назад?

                                      Выбор за тобой.
                                        L I T O S H
                                        L I T O S H Старожил
                                        02 ноября 2020, 10:48
                                        Слушай, я знаю кто ты, Василий и собственно пользуюсь твоими бесплатными компонентами. Но если ты, видя, как этот нехороший человек начал бычить на меня. И ты пытаешься меня напугать своим или его авторитетом, что они якобы «старожилы» и им все позволено, то заявляю ответственно — мне похер. Я не поведусь на твою позицию, что я должен ему во всем потакать и что по-русски то, что ты сейчас пытаешься пропихнуть называется «дедовщиной». Что не имеет никакого отношения к нормальному мирному урегулированию споров.
                                        Соответственно, если ты глядя на все это, винишь меня в моей защите от таких вот индивидуумов, то да можешь прямо сейчас меня заблокировать, так как я говорил ему, чтоб он свалил, говорю и буду говорить, потому как он себя так показал САМ.
                                          L I T O S H
                                          L I T O S H Старожил
                                          02 ноября 2020, 10:50
                                          и еще похлеще скажу!
                                            Александр Мельник
                                            Александр Мельник Проверенный
                                            02 ноября 2020, 11:21
                                            А ты мне неприятен, так что я тебя просто отключу — так это работает?
                                            судя потому что автор удален, то видимо да — так и работает.
                                            Не совсем согласен с таким решением, автор старался сдержано реагировать на довольно неприятные выпады и оскорбления.
                                              Василий Наумкин
                                              Василий Наумкин Администратор
                                              02 ноября 2020, 11:23
                                              И ты пытаешься меня напугать своим или его авторитетом, что они якобы «старожилы» и им все позволено, то заявляю ответственно — мне похер.
                                              и еще похлеще скажу!
                                              Нетрудно заметить, что автор был отключен после вполне конкретных заявлений.

                                              Если ему похер — то мне уж тем более.
                                                Павел Гвоздь
                                                Павел Гвоздь Эксперт
                                                02 ноября 2020, 11:44
                                                Расскажи-ка, о каких таких выпадах и оскорблениях речь?
                                                  Павел Гвоздь
                                                  Павел Гвоздь Эксперт
                                                  02 ноября 2020, 11:56
                                                  автор старался сдержано реагировать на довольно неприятные выпады и оскорбления.
                                                  Мученник, блин… Автор тупил жёстко, когда ему про дыру говорили, которую он открывает своим компонентом и даже решение предлагали. Он просил каких-то аргументов и начал нести какую-то чушь про ajax запросы на моём сайте. Я пытался вести конструктивный диалог, задавал конкретные вопросы, он куда-то в сторону увиливал и не отвечал на них.

                                                  Какие ещё выпады и оскорбления, не пойму? Если чел тупит, то я ему так и написал. Если он реагирует неадекватно на критику, вместо принятия оной – защищается, то я тоже так и написал.
                                                  Aleksandr Huz
                                                  Aleksandr Huz Эксперт
                                                  02 ноября 2020, 11:45
                                                  Пацан к успеху шел, не получилось, не фартануло!
                                        L I T O S H
                                        L I T O S H Старожил
                                        02 ноября 2020, 10:05
                                        Проверю информацию. Спасибо
                                          L I T O S H
                                          L I T O S H Старожил
                                          02 ноября 2020, 10:36
                                          Вообще не получается вызвать сниппет, через @INLINE в tpl, но согласен, что кто-нибудь может изощренно поступить. И чуть-чуть, но все таки прислушаюсь к сообществу (хоть и порой некоторые неадекваты), правда в ущерб функционалу.
                                          Я только ЗА, чтобы культурно обсудить баги и недочеты. В этих целях я и публикую здесь дополнения. Я могу просто убрать возможность передачи параметров и большинство ваших аргументов будет не актуальны. Собственно об этом я и парился (параметрах сниппета). Придется пользвателям компонента ловить переменные через $_POST. Вообщем-то я даже так и задумывал, просто под руку подвернулись параметры и я их включил в вызов.
                                            Ivan
                                            Ivan Проверенный
                                            02 ноября 2020, 12:06
                                            А какой прикол использовать ваш компонент без возможности передать параметры? Это вы предлагаете создавать сниппет и в нем вызывать другой?
                                          Ivan
                                          Ivan Проверенный
                                          02 ноября 2020, 11:51
                                          Если я правильно понимаю, то у modx желательно никому не показывать свой table_prefix (ну по крайней мере раньше это было капец как опасно).

                                          С помощью вашего сниппета можно просто вызвать pdoResources с параметром showLog и мы увидим запрос в базу данных, в котором увидим table_prefix. Так же можно сделать любой leftjoin и т.д.
                                            Павел Гвоздь
                                            Павел Гвоздь Эксперт
                                            02 ноября 2020, 12:05
                                            Да table_prefix можно и так узнать через его подход:
                                            {'!pdoResources' | snippet : [
                                                'parents' => 0,
                                                'resources' => 1,
                                                'tpl' => '@INLINE {$_modx->config.table_prefix}',
                                            ]}
                                            Но узнать table_prefix – это самое незначительное, что можно натворить с такой дырой. Тут вот хорошо описали, что примерно можно натворить. Без аргументов правда.
                                              Ivan
                                              Ivan Проверенный
                                              02 ноября 2020, 12:08
                                              Я пробовал передать инлайн чанк и не сработало. Может я что-то не так делал.
                                                Алексей Соин
                                                Алексей Соин Проверенный
                                                02 ноября 2020, 12:24
                                                $.ajax({
                                                        url: fastsnippet,
                                                        type: "post",
                                                        data: {
                                                            snippet: 'pdoresources',
                                                            params: {
                                                                tpl: '@INLINE {$_modx->config.site_name}'
                                                            }
                                                        }
                                                    })
                                                  Ivan
                                                  Ivan Проверенный
                                                  02 ноября 2020, 12:33
                                                  Оно так не работает. Этот параметр выводится только потому-что на странице доступен и при рендере заменяется. Если вы сделаете tpl: '@INLINE {$id}', то фиг че получите)))
                                                  И просто в инспекторе кода подставить tpl: '@INLINE {$_modx->config.site_name} [[++site_name]]' и выполнить ajax запрос, то тоже не сработает. Если я что-то не заметил — поправьте пожалуйста.

                                                  {{+id}}, [[+id]] тоже не работает)



                                                  Но все это не имеет значения, т.к. в любом случае уязвимость есть
                                                    Алексей Соин
                                                    Алексей Соин Проверенный
                                                    02 ноября 2020, 12:38
                                                    {$id} не работает потомучто сниппет не запускается именно на страницу, а происходит просто runSnippet. И смотреть надо не в консоли, а в ответе во вкладке «сеть», тогда выведется ответ
                                                      Алексей Соин
                                                      Алексей Соин Проверенный
                                                      02 ноября 2020, 12:44
                                                      а запустив вот так
                                                      $.ajax({
                                                              url: fastsnippet,
                                                              type: "post",
                                                              data: {
                                                                  snippet: 'pdoresources',
                                                                  params: {
                                                                      tpl: '@INLINE {$_modx->runSnippet("!pdoUsers", [ "tpl" => "" ])}'
                                                                  }
                                                              }
                                                          })
                                                      и посмотрев в ответ который прийдет с сервера можно увидеть всех пользователей, д и запустить любой сниппет похожим образом
                                                        Ivan
                                                        Ivan Проверенный
                                                        02 ноября 2020, 12:54
                                                        Да это жестко)
                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                              73