Pergunta

Eu tenho um aplicativo flexível que precisa gerar e executar JavaScript.Quando digo isso, quero dizer que preciso executar JavaScript bruto que criei em meu aplicativo Flex (não apenas um método JavaScript existente)

Atualmente estou fazendo isso expondo o seguinte método JavaScript:

function doScript(js){ eval(js);}

Posso então fazer algo assim no Flex (nota:Estou fazendo algo mais substancial do que uma caixa de alerta no aplicativo Flex real):

ExternalInterface.call("doScript","alert('foo'));

Minha pergunta é se isso impõe algum risco à segurança, presumo que não, já que o Flex e o JasvaScript são executados no lado do cliente ...

Existe uma maneira melhor de fazer isso?

Foi útil?

Solução

Não há necessidade da função JavaScript, o primeiro argumento para ExternalInterface pode ser qualquer código JavaScript, não precisa ser um nome de função (a documentação diz isso, mas está errado).

Experimente isto:

ExternalInterface.call("alert('hello')");

Outras dicas

Isso não é inerentemente perigoso, mas no momento em que você passa quaisquer dados fornecidos pelo usuário para a função, ela está pronta para uma exploração de injeção de código.Isso é preocupante e algo que eu evitaria.Acho que uma abordagem melhor seria expor apenas a funcionalidade que você precisar, e nada mais.

Pelo que eu sei, e definitivamente não sou um hacker, você está completamente bem.Realmente, se alguém quisesse, poderia explorar seu código de qualquer maneira no lado do cliente, mas não vejo como eles poderiam explorar o código do lado do servidor usando javascript (a menos que você use javascript no lado do servidor)

Não vejo onde isso permite que eles façam algo que já não pudessem fazer chamando eval.Se há uma falha de segurança sendo introduzida aqui, não vejo.

Lembre-se também de que as ações do script são controladas pela tag “AllowScriptAccess” na instrução.Se a página da web não desejar essas ações, ela não deverá permitir a chamada de scripts.

http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16494

ExternalInterface.call("eval", "alert('hello');");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top