Html puede contener pequeños bits de Javascript incrustados en él (por ejemplo, definido en onclick
controladores de eventos).Interpretar y/o recibir código dotNet en tiempo de ejecución
Si estuviera escribiendo un navegador HTML utilizando un lenguaje dotNet como C#, lo tecnologías o las API podría utilizar para ejecutar dichos fragmentos de Javascript, dado que yo no lo recibo hasta que el tiempo de ejecución (y recibirla como datos de cadena, no como código ejecutable)?
¿Es más fácil o más difícil si el código que se ejecuta fuera C# snippets en lugar de Javascript?
¿Existe alguna técnica que no requiera que mi código tenga privilegios inusuales? Por ejemplo, un método como
CodeCompiler.FromSource
requiereSecurityPermissionFlag.UnmanagedCode
(que me parece excesivo: no veo por qué es tan arriesgado compilar código).Si controlé tanto el lado del servidor como el código del lado del cliente, también podría considerar compilar tales fragmentos de script en el servidor en lugar de hacerlo en el cliente y luego enviarlo como código precompilado al lado del cliente. ser ejecutado. ¿Hay alguna forma de enviar ese código (un ensamblado dotNet, presumiblemente) a través de la red para el cliente, tener el código del lado del cliente recibirlo de la red en la RAM del lado del cliente e invocarlo en el lado del cliente sin almacenarlo como un archivo en una unidad de disco del lado del cliente?
Editar
tengo respuesta a las tres primeras preguntas: Me he resignado al hecho de que la compilación toma altos privilegios. No veo por qué; tal vez (aunque no considero que esto sea una razón muy convincente) es porque el compilador se implementa utilizando código no administrado. Tal vez esto cambie cuando vuelvan a implementar el compilador utilizando el código administrado, tal vez en el marco temporal de "C# versión 5". En cualquier caso, sea cual sea el motivo, parece ser lo que es, y no hay soluciones alternativas (otras API similares pero que requieren menos privilegios).
Mi pregunta restante es cómo obtener una instancia de ensamblado de una máquina a otra. Cuando tenga tiempo, averiguaré si el código que no es de confianza puede ejecutar el método Assembly.Load(byte[] rawAssembly)
.
¿Has visto la demo de Anders REPL loop de PDC '08. Solo espere hasta que salga y estará configurado :) --http: //channel9.msdn.com/pdc2008/TL16/ (Está hacia el final) –
Así que quiere interpretar el código .NET del cliente, compilar en lado del servidor, luego ejecutar en el cliente directamente desde la memoria? –
Tengo un código de cliente-servidor ya en ejecución. Usando eso, me gustaría enviar scripts desde el servidor para ejecutarlos en el cliente. Si esos scripts necesitan ser compilados, no me importa mucho si están compilados en el servidor o en el cliente. Preferiría hacerlo usando un código del lado del cliente que tenga privilegios mínimos, p. "confianza parcial/zona de internet", que me impide escribir en el disco del lado del cliente, etc. – ChrisW