viktorvsk
@viktorvsk

Насколько безопасно использовать send() для пользовательского ввода?

Есть класс:
class Klass
 def method1(opts={})
 end

 def method2(*args)
 end
end


Если я хочу принимать от пользователя как названия методов, так и аргументы ({ "user_input": "method2('some, [evil], {parameters}')" }), достаточно ли будет ограничиться:
Klass.send(user_input_method_name, user_input_args) if user_input_method_name.in?(Klass.public_methods(false))


А внутри методов рассматривать аргументы только, в качестве строк?
  • Вопрос задан
  • 2330 просмотров
Пригласить эксперта
Ответы на вопрос 1
@j_wayne
Никогда не доверяйте вводу пользователя. Используйте whitelist для указания разрешенных методов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы