Отключить оболочку на ERB

Если координаты линии являются Ax, Ay и Bx, By и центр кругов Cx, Cy, то формулы прямых:

x = Ax * t + Bx * (1 - t)

y = Ay * t + By * (1 - t)

, где 0 & lt; = t & lt; = 1

и окружность

(Cx - x) ^ 2 + (Cy - y) ^ 2 = R ^ 2

, если вы подставляете формулы x и y линии в формулу кругов, вы получаете уравнение второго порядка t и его решения являются точками пересечения (если они есть). Если вы получаете t, который меньше 0 или больше 1, то это не решение, но оно показывает, что линия «указывает» на направление круга.

0
задан jugutier 13 July 2018 в 15:37
поделиться

1 ответ

Песочница Ruby чрезвычайно сложна (есть много способов для рубинового кода сделать вашу жизнь трудной, помимо использования ``). Существуют различные проекты, которые пытаются это сделать, будь то предварительная валидация, изменение среды выполнения, упаковка всего в контейнер докеров или иное. Я бы относился ко всем им как к крайнему приложению.

Самый безопасный вариант - использовать намеренно ограниченный язык шаблонов, например Liquid .

1
ответ дан matthewd 17 August 2018 в 12:30
поделиться
  • 1
    Спасибо за быстрый ответ! Я посмотрю на жидкость. Все еще удивляюсь, что нет возможности построить это, я вижу, как приложение RoR может легко вводить данные из поля формы, чтобы развернуть как частичное, которое может содержать вредоносный ввод, такой как мой пример. Я почти не использую Ruby и RoR, поэтому, возможно, люди просто не используют ERB с пользовательским вводом? – jugutier 13 July 2018 в 15:49
  • 2
    Нет, они этого не делают; он напрямую параллелен вызову eval с пользовательским вводом, что является плохой идеей по всем тем же причинам, что и выполнение команд оболочки из пользовательского ввода ... все, что может сделать команда оболочки, и чистый рубиновый скрипт. – matthewd 13 July 2018 в 16:02