Applets en Java

El funcionamiento del Web está basado en el paradigma cliente/servidor. Un servidor almacena páginas Web en formato html y los clientes las consultan. Los clientes corresponden a programas de navegación en el Web como por ejemplo Netscape, Internet Explorer, etc. Una página Web se transmite del servidor al cliente por medio de la red internet, en el momento en que el cliente la consulta.

Una página Web puede contener varios medios audio/visuales:

Un applet es un programa escrito en Java que anima una porción de la página Web. Al igual que el resto de los medio audio/visuales, el applet está almacenado en el servidor y se transmite al cliente por medio de internet.

La ventaja de los applets con respecto a otros medios audio/visuales es que el usuario puede interactuar con un applet, gracias a que se trata de un programa. Un applet puede desplegar texto, imágenes, sonido y realizar animaciones gráficas, pero todo esto bajo el control de un programa que se transmite por la red y que interactúa con el usuario.

Un applet se ejecuta completamente en el cliente. Esto significa que una vez que fue transmitido, la velocidad de la interacción no depende de la velocidad y latencia de la red. Si es necesario, el applet también se puede comunicar con el servidor.

Para que un programa de navegación en el Web pueda ejecutar un applet es necesario que posea un intérprete de Java. Actualmente Netscape, Internet Explorer y Hotjava cumplen con este requisito.


Portabilidad de Applets

A medida que la computación va madurando como tecnología de diversión y de aumento de la productividad, la tendencia es que cada vez el software debe ser más fácil de usar.

El sueño de la internet es que un usuario apunte y seleccione un ítem en la pantalla para recuperar y ejecutar en el instante un programa de cualquier parte del mundo. Éste es el sueño que Java pretende realizar.

Sin embargo esto no es fácil de lograr. El primer problema que se presenta es el de la portabilidad. Existe una amplia gama de plataformas con procesadores y sistemas operativos incompatibles entre sí. Sería impensable tener en cada servidor programas binarios para todas las plataformas existentes.

Java resuelve el problema de la incompatibilidad de los procesadores haciendo que los applets se almacenen en los servidores en un código intermedio independiente de la plataforma (el byte-code). Es este byte-code el que se transmite hacia los cliente y los clientes ejecutan este código por medio de un intérprete que sí es dependiente de la plataforma.

Para cuando se requiere mayor eficiencia, ya existen clientes que son capaces de compilar el byte-code hacia el código nativo de la máquina del cliente, en el momento de recibir el código. Este compilador también es dependiente de la plataforma, pero lo importante es que los applets sean independientes de la plataforma.


El problema de la seguridad

El segundo problema que se presenta para hacer realidad el sueño de la internet es el riesgo que corre un usuario cuando recupera programas por medio de internet. Después de ejecutarlo se puede encontrar con la sorpresa:

> DIR

FILE NOT FOUND
Es decir el applet puede ser un programa malicioso que destruye el contenido de los discos del usuario. Entonces el usuario afectado puede quejarse ante el administrador del servidor Web que contenía el applet malicioso.

Pero la respuesta puede ser tan simple como pedir disculpas: Lo siento, fuimos atacados por un hacker.

Java resuelve el problema de la seguridad de los usuarios haciendo que un applet no tenga acceso a:

Esto se logra colocando un monitor entre el applet y los recursos que posee el computador del cliente.

Actualmente el monitor prohibe el acceso al disco, la red y la impresora, pero a futuro el usuario podrá dar acceso gradual a estos dispositivos, dependiendo de la confianza que tenga del applet que está ejecutando. El usuario podría considerar que los applets de su proveedor de Software son absolutamente confiables.


Seguridad del monitor

Un programa en C puede modificar cualquier parte de la memoria aprovechándose de que no hay chequeo de punteros nulos o índices fuera de rango.

char *p= 0; p[1000]= 15; Este programa coloca un 15 en la dirección 1000.

Si Java es sintácticamente similar a C, ¿Puede un hacker confeccionar un applet que altere el monitor para conseguir acceso a los dispositivos prohibidos?

No, el lenguaje Java fue diseñado de modo que un applet sólo puede consultar y modificar la memoria que pidió legalmente para sus objetos.

Esto se logra porque Java es semánticamente muy distinto a C:

Por lo tanto Java es un lenguaje seguro: prohibe cualquier tipo de operación que pueda afectar la integridad del ambiente en que se ejecutan sus programas.


Seguridad del código intermedio

Si bien un programa escrito en Java no puede ejecutar operaciones peligrosas, dijimos que lo que se almacena en el servidor es un código intermedio. ¿Puede un hacker fabricar un applet, escribiendo directamente su código intermedio sin pasar por el fuente escrito en Java? Entonces: ¿Qué tan seguro es el código intermedio?

Sí, el código intermedio puede ser fabricado a mano. Además el código intermedio no es seguro. Pero el código intermedio ha sido diseñado para que pueda ser validado. La validación consiste en verificar que en el código intermedio no se realicen operaciones peligrosas. Todos los programas para navegar en Internet incluyen un validador del código intermedio. El programa navegante rechaza aquellos programas que no pasan este proceso de validación.

Formalmente podríamos decir que el validador demuestra que existe un programa en Java cuya compilación es el código intermedio que se recuperó por la red. En este caso se ejecuta el applet sin problemas. Pero si el validador encuentra secuencias de instrucciones que no pueden ser generadas por el compilador de Java entonces el applet se rechaza.