Безопасные шаблоны JavaScript

Я хочу, чтобы пользователи могли создавать шаблоны для отображения своих данных, и эти шаблоны должны отображаться с использованием JavaScript. Мне было интересно, можно ли было безопасно это сделать? Мне просто нужны простые вещи, такие как циклы и операторы if-else и, конечно же, доступ и печать значений переменных в данном объекте.

Существуют ли какие-либо библиотеки шаблонов, которые позволяют это, или простые методы для выполнения этой задачи?


person Stanislav    schedule 07.07.2010    source источник


Ответы (2)


Далее рассматриваются, возможно, безопасные для сервера варианты Node.js (без выполнения произвольного кода/бесконечных циклов). Браузерный сейф (XSS) сложно/невозможно.

Усы явно разработаны, чтобы быть безопасными для потребления пользователем и предотвращать бесконечные циклы, чтобы избежать DoS сервера: https://github.com/janl/mustache.js/

Вы также можете найти порты JavaScript Liquid: жидкие шаблоны для Node.js, например https://github.com/liquid-lang/liquid-node, поскольку Liquid является выбор страниц GitHub по умолчанию, поэтому запуск на сервере должен быть безопасным.

Варианты, о которых известно, что они не безопасны:

  • https://mozilla.github.io/nunjucks/templating.html "nunjucks делает не выполнение в песочнице, поэтому небезопасно запускать пользовательские шаблоны или вставлять пользовательский контент в определения шаблонов».
person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.12.2019

Вы не можете запустить что-то безопасное в браузере.

Что вы можете сделать, так это поместить в песочницу потенциально небезопасный контент в IFRAME с src, немного отличающимся от вашей главной страницы. например:

  • ваша страница находится на www.example.com
  • и ваш iframe находится на чем-то вроде: sandbox.example.com , www.example.com:8080,...

IFRAME не сможет получить доступ к ресурсам родительской страницы. Это не предотвращает XSS, но это еще одна проблема, о которой вы все равно должны заботиться.

И если вы посмотрите на механизм шаблонов, взгляните на PURE, он хорошо разделяет HTML и JS.

Затем вы можете дать возможность людям создавать HTML только из шаблонов и оставить код JS на вашей стороне. И, если необходимо, создайте функцию очистки, чтобы убедиться, что HTML не содержит JS.

person Mic    schedule 07.07.2010