Мой eval () безопасен?
Я построил ролик для игры в кости здесь:http://howderek.com/projects/diediedie/
и я хотел внедрить математику, чтобы мои пользователи могли предварительно преобразовать математические операции в свои списки, что полезно для RPG.
Вместо создания функции для обработки математики или использования библиотеки, такой какmath.jsЯ подумал, что, поскольку в JavaScript встроена математика, это может быть полезно дляeval()
.
Причина, по которой я обеспокоенeval()
однако, это добавление?q=whatever
в адрес DieDieDie входитwhatever
в коробку и передал его DieDieDie
Теперь, очевидно, если бы это была просто eval-консоль, было бы легко злоупотреблять и запускать вредоносный JavaScript через, но это не так, я использую RegEx перед запускомeval()
От (http://howderek.com/projects/diediedie/js/diediedie.js):
if (!replaced.match(/[^0-9 | + | \- | * | \/ | ( | ) | \. | % | > | <]/g)) {
result = eval(replaced);
} else {
throw 'Unsafe eval (more than just math), refusing to execute.';
}
Итак, мне было интересно, есть ли способ обойти RegEx и запустить код, хотя этоeval()
просто введя текст в поле.