javascript оценивает простой пользовательский математический файл node.js - PullRequest
1 голос
/ 18 мая 2011

Мне нужно оценить какую-то простую пользовательскую математику.Например, умножение на 2 числа.

Это открывает для меня атаки с использованием инъекций.

Мой план состоит в том, чтобы поместить в белый список группу значений [^|(|)|\d+|\*|\/|\+|-] и заменить все остальное на регулярное выражение перед оценкой.*

Есть проблемы с этим?

Пример строки:

324*32
(5+4-17) / 3

1 Ответ

1 голос
/ 19 мая 2011

Я не могу придумать какого-либо особенно неприятного способа испортить ваш сервер, используя только цифры и несколько операторов, однако есть некоторые вещи, на которые нужно обратить внимание:

Учитывая, что[^...] является классом символов, вам не нужно разделять каждое значение с помощью |.Это, вероятно, то, что вы действительно хотите: [^^()\d*\/+-].Это будет соответствовать всему, что вы делаете , а не , который хотите разрешить.

Кроме того, важно помнить, что в JavaScript ^ не представляет полномочия, а скорее "исключающее или".Это означает, например, что 2 ^ 3 == 1.Таким образом, вы, вероятно, не хотите помещать в белый список ^: [^()\d*\/+-].

Вы можете столкнуться с недопустимым синтаксисом, таким как (1 * (2 + 3), так что вы должны следить за этимВозможно, вы можете просто использовать блок try catch и по-настоящему разобраться с такими вещами (сообщить о проблеме пользователю или что-то в этом роде).

...