Как связать сценарий Ruby с объектом и выполнить его по запросу (в Rails)? - PullRequest
0 голосов
/ 26 мая 2020

Меня интересует загрузка скрипта (файла) через мое приложение Rails, а затем возможность выполнить это по запросу.

Я полагаю, что первым шагом здесь будет обработка загрузки файла таким образом, чтобы я Model, на который я могу ссылаться на файл, например Model.script. Для меня это имеет смысл.

Далее я планирую открыть метод маршрута / контроллера, который будет выполнять этот сценарий, но я не уверен, как обрабатывать фактическое выполнение внутри этого метода. Например, если бы у меня было

class Model
  def run_script
    # logic to run self.script
  end
end

, как бы мне выполнить связанный файл / код, учитывая, что это файл Ruby? Обратите внимание, что сценарий не должен запускаться в контексте приложения Rails, его просто нужно запустить.

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать eval, который будет запускать сценарий Ruby, но будьте очень, очень осторожны!

Подробное объяснение см. В разделе « Код data, данные имеют код".

Пример:

eval(@model_instance.script)

eval очень опасно. Если вы дадите пользователю возможность загружать и запускать непроверенный скрипт, это может создать огромную проблему. Например, кто-то может загрузить такой сценарий:

User.delete_all

Это удалит всех пользователей из таблицы users с помощью запроса SQL без вызова каких-либо обратных вызовов Active Record.

Вы можете использовать метод Ruby taint, чтобы добавить дополнительную безопасность, но он не является 100% надежным.

Подробный пример см. В разделе « Блокировка Ruby в Сейфе".

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