plus - Deshabilitar JavaScript en iframe/div
script src https apis google com js platform js></ script (4)
Estoy haciendo un pequeño editor de páginas HTML. El editor carga un archivo en un iframe. Desde allí, podría agregar, modificar o eliminar los elementos de la página con nuevos atributos, estilos, etc. El problema con esto es que JavaScript (y / u otros lenguajes de programación) pueden modificar completamente la página cuando se carga, antes de empiezas a editar los elementos. Por lo tanto, cuando guarde, no guardará el marcado original, sino la página modificada + sus cambios.
Entonces, necesito alguna forma de deshabilitar el JavaScript en el iframe, o de alguna manera eliminar todo el JavaScript antes de que JavaScript empiece a modificar la página. (Me imagino que tendré que terminar analizando el archivo para PHP, pero eso no debería ser demasiado difícil) Consideré escribir un script para recorrer todos los elementos, eliminar cualquier etiqueta, onclick''s, onfocus''s, onmouseover''s, etc. Pero Eso sería un verdadero dolor.
¿Alguien sabe de una manera más fácil de deshacerse de JavaScript de ejecutarse dentro de un iframe?
ACTUALIZACIÓN: a menos que me haya perdido algo, creo que no hay manera de simplemente ''deshabilitar JavaScript''. Por favor corrígeme si estoy equivocado. Pero supongo que la única forma de hacerlo sería analizar las etiquetas de script y los eventos de JavaScript (clic, mouseover, etc.) de una cadena de página solicitada.
HTML5 introduce el atributo sandbox
en el iframe que, si está vacío, deshabilita la carga y ejecución de JavaScript.
Puede configurar la Política de seguridad de contenido como script-src ''self'' en el encabezado. CSP bloqueará cualquier script que no sea de nuestro propio sitio web. De esta manera, podemos evitar que cualquier secuencia de comandos cambie los elementos en nuestra página.
Puede obtener más información aquí http://www.html5rocks.com/en/tutorials/security/content-security-policy/
Puede probar la misma solución adoptada por CKEditor, de la que tiene una demostración here .
Al cambiar del modo RTE al modo fuente, puede ingresar algo de JavaScript y ver el resultado, que es un reemplazo del nodo JS en una cadena codificada de forma segura.
Si está en modo de fuente de vista , ingresando alguna línea JS como:
<script type="text/javascript">
// comment
alert(''Ciao'');
</script>
lo verá representado de esta manera cuando vuelva al modo de editor de texto enriquecido :
<!--{cke_protected}%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0D%0A%2F%2F%20comment%0D%0Aalert(''Ciao'')%3B%0D%0A%3C%2Fscript%3E-->
Creo que es una de las formas más fáciles y efectivas, ya que el RegExp para analizar los nodos JS no es complejo.
Un ejemplo:
var pattern = /<script(/s+(/w+/s*=/s*("|'').*?/3)/s*)*/s*(//>|>.*?<//script/s*>)/;
var match = HTMLString.match(pattern); // array containing the occurrences found
(Por supuesto, para reemplazar el nodo de script debe usar el método replace ()).
Saludos.
Sí, tu actualización es correcta. Debe asumir que cualquier entrada que reciba del usuario puede contener elementos malintencionados. Por lo tanto, debe validar en el servidor antes de aceptar su entrada.