Criptonomicón

Suscripción gratis

Susurros

Ariadn@

¿Intimidad?

Artículos

Seguridad

Acceso a BD

Autenticación

Comercio-e

Linux

Navegación segura

Control de acceso

CGI

Java

JavaScript

Cookies

Crashes

Agujeros

Spam

Remailers

Anonimato

Correo seguro

Web seguro

Consejos prácticos

Referencias

Libro de Visitas

Marcado de Datos Marcado

Las primeras versiones de JavaScript poseían un agujero de seguridad consistente en que las propiedades de un documento estaban siempre a disposición del código JavaScript de otros documentos.

¿Qué riesgos representaba este agujero para la seguridad y la intimidad? Imagina que tú cargas una página en un frame y que en otro frame escondido (de dimensión tan pequeña que no aprecias su presencia) existe un programa en JavaScript que va accediendo a las propiedades de tu página como LINKS, ANCHORS y elementos de los FORM, y los va transmitiendo a un sitio Web donde son almacenados y procesados.

Puedes pensar que el riesgo no es para tanto. Está bien, imagina los siguientes escenarios:

  • Un documento podría abrir sin tú advertirlo un fichero URL, como por ejemplo file://c:\windows\, en un frame oculto, que listaría los contenidos de ese directorio en el frame. Un programa en JavaScript en otro frame podría entonces leer los contenidos (disponibles en el array links) y enviarlos al servidor.
  • Una página Web podría abrir un frame invisible mediante un programa en JavaScript, que se quedase en ejecución mientras navegas por otros sitios. Cada cierto tiempo, el programa podría enviar al servidor una lista con los sitios por los que has ido navegando.

Con el fin de evitar estas pequeñas amenazas a la intimidad y la seguridad, Netscape creó una solución en la que se tapaban estos agujeros: evitar que un documento pueda acceder a las propiedades de otro documento, a no ser que provenga del mismo servidor. Aunque así se solucionaba el problema, también se impedían otras aplicaciones benévolas en las que se hacía necesario poder leer las propiedades de otras páginas, por lo que se llegó a una solución de compromiso, llamada Marcado de Datos (Data Tainting), que permite acceder a las propiedades de otro documento, pero dejando evidencia de ello.

  • Cuando el marcado de datos está habilitado, el código JavaScript en una ventana puede acceder sin restricciones a las propiedades de otra ventana, sin importar el servidor desde el que fue cargado el documento de la otra ventana. Sin embargo, el autor de la otra ventana marca (taints) los valores de las propiedades u otros datos que deberían ser seguros o privados, y JavaScript no puede pasar estos valores marcados a otro servidor sin el permiso del usuario.
  • Cuando se deshabilita el marcado de datos, un script no puede acceder ninguna propiedad de una ventana en otros servidor. Puedes comprobarlo en el siguiente ejemplo.

Para habilitar el marcado de datos, el usuario final debe declarar la variable de entorno NS_ENABLE_TAINT, poniéndola a cualquier valor, p.e. a "1".

Cómo marcar y desmarcar elementos de datos individuales

Puedes controlar el marcado de elementos de datos (propiedades, variables, funciones, objetos) mediante dos funciones:

  • taint añade marcado a un elemento de datos, y
  • untaint elimina el marcado de un elemento de datos.

Ambas funciones toman un solo elemento de datos como argumento.

 

Copyright © 1997-1998 Gonzalo Álvarez Marañón, CSIC. Todos los derechos reservados.

Criptonomicón es un servicio ofrecido libremente desde el Instituto de Física Aplicada del CSIC. Para información sobre privacidad, por favor consulte la declaración de política sobre privacidad.