Как сделать строку безопасной для использования в качестве выражения math.js
Я хочу позволить пользователям вводить строку, которая будет оцениваться в math.js как выражение. Что я могу сделать, чтобы предотвратить злонамеренное использование этой функции?
1 ответ
Какое злонамеренное использование вы имеете в виду?
math.js имеет собственный анализатор выражений, поэтому он безопасен, например, от атак XSS. Вы не можете просто добавить произвольный код JavaScript, как с JavaScripts eval
, который может быть опасным для использования.
Что вы можете легко сделать, это выполнить выражение, которое взрывает память и процессор, например, создать очень большую матрицу или что-то в этом роде (math.eval('zeros(1e100, 1e100)')
).
Если вы хотите защититься от этого, вам придется запустить анализатор выражений на отдельном веб-работнике (на стороне клиента) или child_process (сервер node.js), чтобы вы могли завершить процесс, если он занимает слишком много времени. Вы можете использовать такую библиотеку, как workerpool для этого. Эта библиотека используется, например, REST API math.js ( http://api.mathjs.org/) для отключения выражения, работающего более 10 секунд.