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:
texto
imágenes
sónido
video
applets
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:
Los archivos del cliente.
Los dispositivos del cliente (por ejemplo la impresora).
La red.
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:
Java chequea los índices en arreglos.
Java no posee aritmética de punteros.
Java realiza chequeo estático y dinámico de tipos.
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.