Как я могу предоставить шаблон безопасности для изменения пользователем с помощью Python? - PullRequest
0 голосов
/ 15 февраля 2009

Я создаю многопользовательское веб-приложение. Каждый пользователь может иметь свой собственный сайт под моим заявлением. Я рассматриваю, как разрешить пользователю изменять шаблон без проблем с безопасностью? Я оценил некоторый шаблонизатор Python. Например, genshi, это довольно замечательный шаблонизатор, но, тем не менее, может быть опасно разрешать пользователю изменять шаблон genshi. У него такой синтаксис:

<?python

?>

Этот синтаксис позволяет вам запускать все, что вы хотите, чтобы Python мог делать. Я заметил, что, кажется, его можно отключить, передав некоторый параметр. Но есть еще много потенциальных проблем. Например, пользователь может получить доступ к встроенным функциям и методам передаваемых переменных. Например, если я передам объект ORM в шаблон. Он может содержать какой-то метод и переменную, которые я не хочу разрешать пользователю трогать. Может вот так:

site.metadata.connection.execute("drop table xxx")

Итак, мой вопрос: как я могу разрешить пользователю изменять шаблон своего сайта без проблем с безопасностью? Можно использовать любой шаблонизатор Python.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 15 февраля 2009

Jinja2 - это система шаблонов Django-ish с функцией песочницы. Я никогда не пытался использовать песочницу, но мне очень нравится Jinja2 как альтернатива шаблонам Django. Он все еще способствует отделению шаблона от бизнес-логики, но имеет больше соглашений о вызовах Pythonic, пространства имен и т. Д.

Песочница Jinja2

1 голос
/ 15 февраля 2009

Посмотрите на Django templte engine . Он не поддерживает выполнение произвольного кода Python, и все доступные переменные должны быть переданы в простоту шаблона. Это должно быть довольно хорошей основой для создания настраиваемых пользователем страниц. Помните, что вам все равно придется обрабатывать случайные синтаксические ошибки ваших пользователей.

0 голосов
/ 15 февраля 2009

В рельсах есть нечто, называемое жидкость . Вы могли бы взглянуть на это, чтобы получить некоторые идеи. Другая идея: по крайней мере, одна вещь, которую вы могли бы сделать, - это преобразовать ваши объекты в простой словарь - что-то вроде представления json, а затем перейти к вашему шаблону.

0 голосов
/ 15 февраля 2009

Короткий ответ, вероятно, "вы не можете".

Лучшее, что вы можете сделать - это заманить отдельных пользователей в виртуальные машины или песочницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...