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
Комментарии: 73
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
UPD:
Всё, сорри, понял. Это в принципе другой компонент, позволяющий «вызывать» сниппеты через Ajax запросы. Ок.
L I T O S HL I T O S HL I T O S HL I T O S HL I T O S HL I T O S HПри чём тут ajax запросы на моём сайте и дыра, которую ты откроешь, если дашь доступ к pdoResources из фронта, хер знает.
На вопрос мой ответ, умник))
L I T O S HНо я нормально так обдумал в меру своих возможностей на этот счет. Вот смотри, если на сайте доступен AJAX вызов, то любой человек, вне зависимости стоит мой компонент на сайте или нет, может точно также отправлять сколько угодно запросов в бэкэнд с любыми параметрами (т. е. дудосить =) ). И да, тоже думал на счет переменных (параметров, пример: $limit), что это не безопасно, но на самом деле это фактически тот же $_POST, который перезаписывается тотчас же, через строку при нормальной логике сниппета. И если бы я эту возможность убрал, нельзя было бы обращаться к примеру msProducts со своими параметрами, а такая возможность имеется.
В любом случае можно доработать и как бы не против предложений, если вы видите где-то уязвимость =)
L I T O S HРазве имея доступ к pdoResources сделать запрос к таблице modUser нельзя? Это так, навскидку. Я не хакер, у них голова работает гораздо интенсивнее в плане всяких SQL-инъекций.
Этот компонент действительно дыра в безопасности.
Доступ к, например, pdoResources позволяет получить любую информацию из любой таблицы, включая личные данные пользователей, заказы, промо-коды и любую другую коммерческую информацию. А также любые системные настройки, где часто хранятся логины-пароли к платежным системам, апишкам и т.п.
Ответственный программист конечно улыбнется и не будет использовать такой компонент, но найдутся десятки неопытных ребят, которым надо проще и быстрее. А потом начнется… MODX дырявый
L I T O S HПроблема в том, что щас молодые неопытные увидят крутой компонент и без раздумья будут все подряд туда пихать.
Сидеть на jquery в 2020 тоже так себе. Попахивает.
Нет тут никакой альтернативы. Потому что подход в принципе неверный, ведущий только к плохому.
ВСЕГДА на каждый необходимый функционал пишется свой отдельный запрос. Либо на коннектор, либо на плагин. И там уже вся логика, скрытая от посторонних глаз.
L I T O S HНе хочешь слушать — ради бога.
L I T O S HL I T O S HЕсли возможно вызвать ваш сниппет таким образом, то да =)
Вроде бы как можно в аякс вызов передавать не просто название сниппета, а всю строку @FILE snippets/my_snippet.php' но не факт, что такой вызов пройдет проверку, которая основана на системных настройках, я прав?
L I T O S HА вот почему это приложение тогда появилось в официальном магазине? А то все накинулись на разрабочика, а мне кажется большая часть вины лежит на том, кто добавил это в магазин если код такой опасный.
L I T O S HL I T O S HL I T O S HДелать AJAX запрос в сниппет, имхо, это прямой билет в дурку
L I T O S HСобственно, если в разрешенных сниппетах будет какой-нибудь pdoResources, то это будет аналогично этому коду:
L I T O S HЯ не собираюсь использовать твой компонент, который состоит из 30 так-себе-написанных строк, да и другим не советую этого делать.
Какие мы тут плохие, обидели бедняжку:(
Ну ты извини нас, мы дружно скачаем твой компонент и будем использовать на всех своих сайтах. Ведь это самый удобный и самый практичный способ работы с ajax.
L I T O S HИ да, не обижайся, я тоже могу ответить, если че так. И как следует. Особенно таким как вы, которые пишут ахинею по поводу и без.
L I T O S Hпухомконнектором, что еще тут скажешь.Я код компонента не видел, но ясно что или коннектор, или какой-то плагин отлавливает запрос. Скажи если я не прав
L I T O S HНе надо так.
L I T O S HИли будем пытаться жить дружно и не бычить на старожилов сообщества, в которое ты пришёл 2 недели назад?
Выбор за тобой.
L I T O S HСоответственно, если ты глядя на все это, винишь меня в моей защите от таких вот индивидуумов, то да можешь прямо сейчас меня заблокировать, так как я говорил ему, чтоб он свалил, говорю и буду говорить, потому как он себя так показал САМ.
L I T O S HНе совсем согласен с таким решением, автор старался сдержано реагировать на довольно неприятные выпады и оскорбления.
Если ему похер — то мне уж тем более.
Какие ещё выпады и оскорбления, не пойму? Если чел тупит, то я ему так и написал. Если он реагирует неадекватно на критику, вместо принятия оной – защищается, то я тоже так и написал.
L I T O S HL I T O S HЯ только ЗА, чтобы культурно обсудить баги и недочеты. В этих целях я и публикую здесь дополнения. Я могу просто убрать возможность передачи параметров и большинство ваших аргументов будет не актуальны. Собственно об этом я и парился (параметрах сниппета). Придется пользвателям компонента ловить переменные через $_POST. Вообщем-то я даже так и задумывал, просто под руку подвернулись параметры и я их включил в вызов.
С помощью вашего сниппета можно просто вызвать pdoResources с параметром showLog и мы увидим запрос в базу данных, в котором увидим table_prefix. Так же можно сделать любой leftjoin и т.д.
Но узнать table_prefix – это самое незначительное, что можно натворить с такой дырой. Тут вот хорошо описали, что примерно можно натворить. Без аргументов правда.
И просто в инспекторе кода подставить tpl: '@INLINE {$_modx->config.site_name} [[++site_name]]' и выполнить ajax запрос, то тоже не сработает. Если я что-то не заметил — поправьте пожалуйста.
{{+id}}, [[+id]] тоже не работает)
Но все это не имеет значения, т.к. в любом случае уязвимость есть
и посмотрев в ответ который прийдет с сервера можно увидеть всех пользователей, д и запустить любой сниппет похожим образом