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
01 ноября 2020, 05:43
modx.pro
1 546
-7
Поблагодарить автора Отправить деньги

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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