a = "alert(1)"
eval(a)
Метод eval возвращает значение последнего вычисленного выражения.
var str = "if (a) { 1+1 } else { 1+2 }"
var a = true
var b = eval(str)
alert("b равно : " + b) // 2
// теперь поменяем "a"
a = false
b = eval(str)
alert("b равно : " + b) // 3
Если аргумент eval - не строка, то возвращается аргумент без изменения:
r = new RegExp('a')
r == eval(r) // true
Можно обойти это прямым вызовом toString:
function forceEval(obj) {
return eval(obj.toString())
}
Не используйте eval
Выполнение кода в eval может быть небезопасно. При таком выполнении затруднена отладка. В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.
eval для JSON
Как правило, eval используют для разбора формата JSON.
var = eval('('+json+')')
Такой способ небезопасен, но наиболее быстр.
Второй параметр
В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
В современном javascript для этого используется with:
eval(code, obj) // старый вариант
with(obj) {
eval(code) // современный вариант
}
Автор: Гость (не зарегистрирован), дата: 12 мая, 2010 - 20:40
#permalinkА подробней ?
Автор: Shevan, дата: 4 июня, 2010 - 14:46
#permalinkeval может выполнить код полученый аяксом?
И про другие средства хотелось бы услышать ))
Автор: kibal4iw, дата: 5 августа, 2010 - 11:54
#permalinkЯ что-то вообще не понял. Для чего он нужен? Где можно использовать?
Автор: Crusader (не зарегистрирован), дата: 21 сентября, 2010 - 17:36
#permalinkВ старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
А поподробнее? Что имеется ввиду "контекст" и как это можно использовать?
Автор: Shevan, дата: 30 сентября, 2010 - 23:48
#permalinkМожете привести примеры?
Использую для выполнения скриптов полученых АЯКСом
Автор: Гость (не зарегистрирован), дата: 10 ноября, 2010 - 13:53
#permalinkвопрос, а как можно использовать eval() для onload function(); ?
Автор: Гость0 (не зарегистрирован), дата: 21 ноября, 2010 - 22:11
#permalinkМожно по подробней, какие именно проблемы с безопасностью могут возникнуть при использовании этой функции?
Автор: Гость (не зарегистрирован), дата: 14 января, 2011 - 13:59
#permalinkИнтересно, а сколько раз можно вызвать eval(eval(...))? Т.е. сколько вложений eval в eval допускается?
Автор: Гость (не зарегистрирован), дата: 7 марта, 2011 - 22:48
#permalinkКак вставить в eval строку с объектом?
Я что то ничего не понял
Автор: dll (не зарегистрирован), дата: 13 марта, 2011 - 05:47
#permalinkvar str = "function () { return 'ответ' }";
eval(str); и должно вернуть 'ответ' по идеи
Автор: Chamie (не зарегистрирован), дата: 23 мая, 2011 - 17:47
#permalinkНе подскажете, а почему вот такой код даёт ошибку?
var a = "{b:1,bb:[1,2,3]}";
var d = eval(a);
Автор: Skipp, дата: 11 июля, 2011 - 14:01
#permalinkбыстрее в некоторых случаях
eval = function(o){return Function("return " + o)()};Автор: Increazon, дата: 23 июля, 2011 - 20:45
#permalinkЧто возвращает евал? Как ловить ошибку? Я со своего домена ЖРУ аякс, потому испольтзую евал. Про старыне провзеры сказало правильно насчет JSON
Автор: megido (не зарегистрирован), дата: 14 августа, 2011 - 12:34
#permalinkУ меня такой вопрос: стоит ли использовать eval в node.js? Если да/нет, то почему? Интересует именно дела, касающиеся безопасности.
Автор: Гость (не зарегистрирован), дата: 21 апреля, 2012 - 17:41
#permalinkКак использование "eval" может навредить сайту?
Автор: Гость (не зарегистрирован), дата: 4 сентября, 2012 - 15:24
#permalinkспасибо
Автор: CrankOne (не зарегистрирован), дата: 27 октября, 2012 - 23:28
#permalinkЯ использую собственный клиентский jison‐generated парсер, производящий JavaScript‐код на стороне клиента из небольшого макродиалекта, код на котором доставляется через AJAX. Здесь сложно представить, как можно обойтись без вызова eval. Это не какой‐нибудь внушительный JSON, к которому легко задать sanity check, это полноценный JavaScript.
И я довольно много времени потратил, исследуя сеть на предмет AJAX‐инъекций. Хотя во многих местах о них упоминается, я не нашёл конкретных примеров. Люди говороят о CSRF, о том, что, по идее, Same Origin Policy должна предохранять от угона запросов, но мне тяжело разобраться во всём сразу. Большинство сообщений о «eval = evil» сводятся к тому что «malicious code» может быть отдан функции eval, но с таким же успехом, может быть изменён любой другой участок контента, и если уж злоумышленник добрался до DOM'а, то он в последнюю очередь будет менять сериализованный javascript. Кажется, двух правил достаточно для того чтобы не бояться использовать eval:
Если есть что‐то ещё, пожалуйста дополните. Я сравнительно недавно перебрался в web‐программирование, и чувствую себя как бывший сотрудник ИЯФ в ларёчном бизнесе в 90-е.
Автор: alex33, дата: 1 ноября, 2013 - 14:23
#permalinkКороче, Илья,
статья очень маленькая, без разъяснений и неожиданно обрывается, оставив очень много вопросов.
То у вас есть введение, часть 1, часть 2, заключение и всё понятно, а то вот эта статья...
Автор: Гость (не зарегистрирован), дата: 26 марта, 2014 - 21:51
#permalinkа как работает Eval(), никак не пойму? и в чем смысл если есть другие парсери
Автор: Гость (не зарегистрирован), дата: 22 июля, 2016 - 21:43
#permalinkВсем привет, у меня интересный вопрос, в консоли браузера можно выполнить eval, без всяких проблем, это что тоже уязвимость получается, просто не пойму как можно защитить использование eval?, не делать поле для ввода пользователем вредоносного кода с обработчиком eval, так в можно просто взять и захреначить это в консоли браузера, или консоль браузера это другая история?