Pull to refresh

Comments 6

UFO just landed and posted this here
Спешу заметить, что это несколько лучше, чем «настоящий» eval. При таком подходе явно указывается область видимости и не захватывается контекст вызывающей функции. Но, всё равно, зло.

В первом случае не обязательно брать «typeof» и сравнивать с «object» (кстати, а если функция?!). В конкретном случае достаточно
if (foo 
&& foo.bar 
&& foo.bar.baz)
    return foo.bar.baz.name;

Выглядит он не так пугающе, по нему видно, что происходит, да и работает на порядок быстрее.

Второй сценарий — огромная зияющая дыра. Никогда! Никогда! Никогда не допускайте в клиентском коде возможность принимать код извне. Между сервером и клиентов всегда может быть «мужик посередине». Весь нужный код должен приходить исключительно по тегам <sсript>, хотя и это полностью не решает всех проблем.

Во всякого рода «Уберштука за 20 минут» или "… 30 строк кода" eval'ы и иже с ними допускаются, но только при том условии, что этот выхлоп никогда не попадёт в серьёзный код и не будет использоваться в продакшене.
Sign up to leave a comment.

Articles