eval
часто считается небезопасным, потому что он будет запускать любой код, который принимает в качестве входных данных на клиентском устройстве с полными привилегиями вызывающего, независимо от того, является ли этот код вредоносным или нет.
Если есть вероятность, что запускаемая строка eval
могла быть затронута злонамеренным третьим лицом, то это опасно, так как оно будет иметь все разрешения, которые ваш пользователь предоставил веб-странице.
Например, злой пользователь X мог написать сценарий, который ваше приложение невиновно предоставило браузеру пользователя Y, где оно запускается с eval
.
Однако в вашем случае, поскольку вы не обслуживаете данные от одного пользователя другому, нет возможности, что строка могла быть затронута третьей стороной, и вполне нормально использовать eval
. См. этот вопрос . Тем не менее eval относительно неэффективен по сравнению с альтернативой Function
. Функция хоть и небезопасна, но более безопасна, но мы уже установили, что этот тип уязвимости не применим к вашему варианту использования. Более важным является тот факт, что (по крайней мере, согласно документам MDN) Function
более эффективен. Просто сделайте: var result = Function("return" + newArr)();
.
Ваш клиент по-прежнему сможет писать такие глупые вещи, как while(true){console.log("infinite loop")}
, но они все равно могли бы сделать это через консоль, и это не повлияет ни на кого другого. В заключение, eval
и подобные функции часто слепо осуждаются как «небезопасные», но это верно только в определенных контекстах.