Запретить выполнение кода ruby в HAML

#ruby-on-rails #ruby #haml

#ruby-on-rails #ruby #haml

Вопрос:

Есть ли способ предотвратить выполнение определенного кода Ruby в HAML?

Проблема, с которой я сталкиваюсь, заключается в следующем: пользователям разрешено настраивать свои собственные файлы HAML в среде CMS. Я хочу разрешить IF / ELSE и ЦИКЛЫ внутри этих файлов, но другой код ruby не должен выполняться по соображениям безопасности.

Должен ли я сканировать пользовательские файлы HAML на наличие кода ruby и удалять его или есть лучшее решение?

Спасибо за любую помощь!

Грег

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

1. Итак, как вы собираетесь запретить вызывать код из if, например -if File.rm('/') ?

Ответ №1:

Я не думаю, что вы это делаете, по крайней мере, для HAML.

Существуют другие библиотеки представлений для Ruby, предназначенные для обеспечения безопасности конечного пользователя. Например, Cerubis или Liquid.

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

1. Или Radius, если вы идете по этому пути.

Ответ №2:

Похоже, вы ищете какую-то изолированную среду для подобных шаблонов. Я не могу говорить о результатах, которые вы могли бы получить, используя эту библиотеку. Они говорят, что это все еще экспериментально, но, похоже, это хорошее место для начала. Если ничего другого, вы можете использовать их код в качестве руководства для очистки вашего haml.

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

1. Как сказано в репозитории: этот код является экспериментальным. Если вам нравится играть с этим, хорошо. Но если вам нужно что-то безопасное для производства, вероятно, лучше всего использовать что-то, что не является HAML.

Ответ №3:

Одной из альтернативных возможностей было бы интерпретировать вашу клиентскую часть HAML, используя что-то вроде haml.js . Таким образом, нет никаких шансов загрязнить ваш сервер с помощью инъекций или других дыр в безопасности, при этом предоставляя доступ к циклическим конструкциям и логике через Javascript.