Я храню шаблоны писем в PostgreSQL, чтобы пользователи могли редактировать исходящие письма. Я использую Liquid для предотвращения выполнения кода на сервере. Чтобы ускорить процесс извлечения шаблона электронной почты из db, разбора его, а затем его рендеринга, я хотел бы маршалировать жидкий шаблон. Вот код, чтобы сделать это:Вопросы безопасности с поддерживаемыми DB шаблонами Liquid и Marshal.load
# Saving template to the db
text = "template text from possibly dangerous user {{stuff}}"
template = Liquid::Template.parse(text)
email_template = EmailTemplate.new # the db class
email_template.source = Marshal.dump(template)
email_template.save
# time goes by and now we need that template
template = Marshal.load(email_template.source) # !! Is this dangerous? !!
Я прочитал, что Marshal.load
может привести к удаленному выполнению кода. Я собираюсь маршалировать объект Liquid :: Template, но это содержит данные, предоставленные страшными пользователями. Есть ли какие-либо соображения безопасности, о которых мне нужно знать?
Спасибо. Есть ли у вас другой вариант для выполнения вышеуказанного? – bennick
@bennick Извините, пропустил мою последнюю строку. Добавлено сейчас. – Agis
Хорошо круто. Я просто не был уверен, что любое исключение удаленного кода может «просочиться», хотя объект Liquid :: Template во время процесса Marshal.load. – bennick