Как сделать строку безопасной для использования в качестве выражения 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 секунд.

Другие вопросы по тегам