У меня есть гибкое приложение, которому нужна возможность генерировать и выполнять JavaScript. Когда я говорю это, я имею в виду, что мне нужно выполнить необработанный JavaScript, который я создаю в своем приложении Flex (а не только существующий метод JavaScript).
В настоящее время я делаю это, открывая следующий метод JavaScript:
function doScript(js){ eval(js);}
Затем я могу сделать что-то подобное в Flex (примечание: я делаю что-то более существенное, чем окно предупреждения в реальном приложении Flex):
ExternalInterface.call("doScript","alert('foo'));
Мой вопрос в том, представляет ли это какой-либо риск для безопасности, я предполагаю, что это не так, поскольку все Flex и JasvaScript работают на стороне клиента ...
Есть лучший способ сделать это?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Насколько я знаю, а я точно не хакер, с вами все в порядке. На самом деле, если бы кто-то захотел, они могли бы использовать ваш код в любом случае на стороне клиента, но я не понимаю, как они могут использовать ваш код на стороне сервера с помощью javascript (если вы не используете javascript на стороне сервера)
Я не понимаю, где это позволяет им делать то, что они уже не могли сделать, вызвав eval. Если здесь появляется дыра в безопасности, я ее не вижу.
Само по себе это не опасно, но в тот момент, когда вы передаете в функцию какие-либо данные, предоставленные пользователем, это готово для эксплойта с внедрением кода. Это беспокоит, и я бы этого избегал. Я думаю, что лучшим подходом было бы показать только ту функциональность, которую вы необходимость, и не более того.
Функция JavaScript не нужна, первым аргументом ExternalInterface может быть любой код JavaScript, это не обязательно должно быть имя функции (так сказано в документации, но это неверно).
Попробуй это:
ExternalInterface.call("alert('hello')");
Помните также, что действия сценария управляются тегом «AllowScriptAccess» в инструкции. Если веб-страница не требует этих действий, они не должны разрешать запуск скриптов.
http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16494
ExternalInterface.call("eval", "alert('hello');");