LINUX.ORG.RU

В чем сходство Function и Eval?

 


0

1

У крокфорда в good parts есть утверждение, что Function — это, почти то же самое что eval. Я копаюсь уже битый час, и не могу понять вообще, что у них общего. Насколько я понял, Function сразу компилируется в обычную анонимную ф-цию. И в дальнейшем, она ведет себя как обычная ф-ция, даже с сохранением лексического скопа в замыканиях.

fu=Function("var a=1; return function(){return(a)}")
console.log(""+fu)
//
//out:
//function anonymous() {
//var a=1; return function(){return (a)}
//}

inner_fu=fu()
console.log(inner_fu())
//out:
//1
Что же общего нашел крокфорд между ними? Покажите пример эквивалентного поведения, пожалуйста.



Последнее исправление: anonimous (всего исправлений: 1)
Ответ на: комментарий от anonimous

Правильно, я говорю, что юзер-инпут напрямую эвалить не надо

Я же говорю - если евала нет (а евала нет, если тебе не надо евалить юзер_инпут), то и уязвимости нет.

На этом все проблемы с эвалом заканчиваются.

Да, на использовании евала - проблемы с евалом заканчиваются. Я это сказал в самом начале, хватит повторяться.

anonymous
()
Ответ на: комментарий от anonymous

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

на использовании евала - проблемы с евалом заканчиваются.

т.е. не использовании вообще, а использовании в конкретных юзкейсах.

anonimous
() автор топика
Ответ на: комментарий от anonimous

Нет, я имел в виду, что эвал не нужно использовать в работе со строками пришедщими на сервер.

А в других случаях его тем более не нужно использовать. Тем более что тебе никто не гарантирует, что какая-нибудь ф-я, в которую ты передал пользовательский ввод, не делает евала в своих кишках.

anonymous
()
Ответ на: комментарий от anonimous

Эвал non-tainted строк нахер не нужен, т.к. вырождается в обычный код, где методом подстановки является лексическое связывание. Он необходим лишь для загрузки модулей из trusted environment, потому что получить рантайм из текста в файле можно, внезапно, только так. Остальные его применения, как я уже писал — признак макаки за клавиатурой. Это понимает любой seasoned developer, до чего тебе очень далеко. А секрет прост — надо писать докуя кода вместо докуя сниппетов, и такие вопросы сами отпадут.

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.