Собственно вопрос, кто какие обходы знает? Не важно как, главное интересно посмотреть на способы запуска кода из текста. Для примера возьмем тест-код alert(1).
Немного не так: this["\x65\x76\x61\x6C"]('alert(1);'); можно спросить, откуда знаете об этом способе? жду еще варианты...
Это же обычная документированная возможность JS, в нем все объекты являются одновременно ассоциативными массивами, по сути тот же eval и вызывается, просто слова "eval" в скрипте нет.
Это само собой, меня не беспокоит то, что это фактически тоже самое - вот недавно писал как раз статью о крипте и обфускации JS, там этот способ как раз и описал... Меня интересуют вообще любые способы, в которых не используется явно слово eval.
Ну, через document.write для веб-страниц способ очевиден, есть еще такие: Нечто типа document.write: PHP: <html> <body> <script> var code = document.createElement("script"); code.setAttribute('type', 'text/javascript'); code.text = "alert(1);"; document.body.appendChild(code); </script> </body> </html> Эти интереснее: PHP: var code = "alert(1);document.location.href='http://ya.ru/'"; setTimeout(code, 1); PHP: var code = "alert(1);document.location.href='http://ya.ru/'"; new Function(code)();
javascript:\u0064\u006F\u0063\u0075\u006D\u0065\u006E\u0074\u002E\u0077\u0072\u0069\u0074\u0065\u0028\u0027\u006C\u006F\u006C\u0027\u0029\u003B Не работает, возможно надо оставлять точки и символы в сыром виде. Да, вот так работает: \u0064\u006F\u0063\u0075\u006D\u0065\u006E\u0074.\u0077\u0072\u0069\u0074\u0065('\u006C\u006F\u006C');
Это только для идентификаторов. Необходимый и достаточный eval(name): Code: \u0065\u0076\u0061\u006c(\u006e\u0061\u006d\u0065) Я просто оставлю это здесь. http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Похожее, но все-таки немного отличающееся от предыдущих способов: PHP: <script> window.onerror = new Function("alert(1);"); throw 1; </script> Можно еще из флеш-ролика дергать JS-функции на веб-странице)