Справочник javascript: eval

Форум

Учебник Node.JS скринкаст Стандарт языка

Справочник

Discord чат

 
Статьи Тест знаний Аналоги функций PHP  

eval

Синтаксис

eval(codeStr)

Аргументы

codeStr
код для выполнения, может использовать переменные и свойства существующих объектов

Описание, примеры

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

В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval

А подробней ?


Автор: Shevan, дата: 4 июня, 2010 - 14:46

#permalink

eval может выполнить код полученый аяксом?
И про другие средства хотелось бы услышать ))


Автор: kibal4iw, дата: 5 августа, 2010 - 11:54

#permalink

Я что-то вообще не понял. Для чего он нужен? Где можно использовать?


Автор: Crusader (не зарегистрирован), дата: 21 сентября, 2010 - 17:36

#permalink

В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
А поподробнее? Что имеется ввиду "контекст" и как это можно использовать?


Автор: Shevan, дата: 30 сентября, 2010 - 23:48

#permalink

В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.

Можете привести примеры?
Использую для выполнения скриптов полученых АЯКСом



Автор: Гость (не зарегистрирован), дата: 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 строку с объектом?
Я что то ничего не понял

function = test;
str = function+'(\'Сюда надо вставить объект\')';
eval(str);
//В общем надо выполнит функцию имя которой мне в среде не известно, но при этом надо вставить в нее объект

Автор: dll (не зарегистрирован), дата: 13 марта, 2011 - 05:47

#permalink

var 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:

  1. Формировать JavaScript, используя только доверенные источники.
  2. При отправке запросов, пользоваться необходимыми методами защиты от cross-forgery

Если есть что‐то ещё, пожалуйста дополните. Я сравнительно недавно перебрался в web‐программирование, и чувствую себя как бывший сотрудник ИЯФ в ларёчном бизнесе в 90-е.


Автор: alex33, дата: 1 ноября, 2013 - 14:23

#permalink

Короче, Илья,
статья очень маленькая, без разъяснений и неожиданно обрывается, оставив очень много вопросов.
То у вас есть введение, часть 1, часть 2, заключение и всё понятно, а то вот эта статья...


Автор: Гость (не зарегистрирован), дата: 26 марта, 2014 - 21:51

#permalink

Автор: Гость (не зарегистрирован), дата: 22 июля, 2016 - 21:43

#permalink

Всем привет, у меня интересный вопрос, в консоли браузера можно выполнить eval, без всяких проблем, это что тоже уязвимость получается, просто не пойму как можно защитить использование eval?, не делать поле для ввода пользователем вредоносного кода с обработчиком eval, так в можно просто взять и захреначить это в консоли браузера, или консоль браузера это другая история?


 
Поиск по сайту
Содержание

Дерево всех статей

Последние темы на форуме
Forum