Pregunta

Tengo una aplicación flexible que necesita la capacidad de generar y ejecutar JavaScript.Cuando digo esto, quiero decir que necesito ejecutar JavaScript sin formato que creo en mi aplicación Flex (no solo un método de JavaScript existente)

Actualmente estoy haciendo esto exponiendo el siguiente método de JavaScript:

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

Entonces puedo hacer algo como esto en Flex (nota:Estoy haciendo algo más sustancial que un cuadro de alerta en la aplicación Flex real):

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

Mi pregunta es si esto impone algún riesgo de seguridad, supongo que no es así, ya que Flex y JasvaScript se ejecutan en el lado del cliente...

¿Hay una mejor manera de hacer esto?

¿Fue útil?

Solución

No es necesaria la función JavaScript, el primer argumento para ExternalInterface puede ser cualquier código JavaScript, no tiene que ser el nombre de una función (la documentación lo dice, pero es incorrecto).

Prueba esto:

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

Otros consejos

Esto no es intrínsecamente peligroso, pero en el momento en que pasa cualquier dato proporcionado por el usuario a la función, está listo para un exploit de inyección de código.Eso es preocupante y algo que evitaría.Creo que un mejor enfoque sería exponer solo la funcionalidad que necesidad, y nada más.

Hasta donde yo sé, y definitivamente no soy un hacker, estás completamente bien.Realmente, si alguien quisiera, podría explotar su código de todos modos en el lado del cliente, pero no veo cómo podrían explotar su código del lado del servidor usando javascript (a menos que use javascript del lado del servidor)

No veo dónde esto les permite hacer algo que ya no podían hacer llamando a eval.Si se está introduciendo un agujero de seguridad aquí, no lo veo.

Recuerde también que las acciones del script están controladas por la etiqueta "AllowScriptAccess" en la declaración.Si la página web no desea realizar estas acciones, no debería permitir que los scripts realicen llamadas.

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

ExternalInterface.call("eval", "alert('hello');");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top