JavaScript, un lenguaje cliente
La programación de JavaScript se basa en la edición de scripts que se integran al código HTML de la página y que se pueden visualizar en cualquier navegador mediante la opción Ver código fuente. El nombre de la opción varía entre los distintos navegadores, pero la funcionalidad final es visualizar el código fuente. Es decir, el usuario puede visualizar el código JavaScript sin limitaciones, este detalle siempre lo debemos tener presente cuando pensemos en el aspecto de seguridad; dentro del código JavaScript no deberíamos incluir datos que podrían ser aprovechados maliciosamente por hackers (por ejemplo, la inclusión del nombre de la cadena de conexión a una base de datos o contraseñas).
JavaScript es un lenguaje interpretado (que es lo opuesto a un lenguaje compilado), por lo que el código se analiza y se ejecuta en el navegador del cliente. No existe una etapa de compilación del código como sucede en otros lenguajes de programación, por ejemplo, C++.
Una de las características básicas de JavaScript es que se ejecuta en el navegador del cliente; en este caso, lo opuesto sería que se ejecutase en el servidor, como lo hace, por ejemplo, PHP o ASP.NET. Esta característica tiene sus ventajas y sus limitaciones. La principal ventaja es el tiempo de respuesta de la aplicación: las acciones JavaScript se resuelven de modo local y no requieren el viaje hasta el servidor, por lo que el tiempo de espera es prácticamente nulo. Esto hace que JavaScript sea una herramienta complementaria casi imprescindible en una aplicación web, independiente del lenguaje elegido para resolver las acciones en el servidor. Por lo tanto, las limitaciones que tiene el lenguaje se compensan con el uso de un lenguaje de servidor que realiza en el servidor lo que JavaScript no puede hacer desde el cliente, por ejemplo, acceder a la base de datos del servidor o escribir en el disco duro. Tengamos en cuenta que todo lo que se realice en el servidor siempre requerirá el envío de una página de respuesta al cliente (la página enviada puede ser total o parcial, si se utiliza una tecnología del estilo Ajax).
JavaScript no es Java
Algo que conviene tener claro desde ahora: JavaScript y Java son dos lenguajes totalmente diferentes aunque compartan ciertas sintaxis y tengan nombres similares que dan a entender cierta relación directa.
En primer término, Java es un ejemplo de un lenguaje compilado y ya sabemos que JavaScript es un lenguaje interpretado. Java se ejecuta en una máquina virtual Java que puede estar tanto en el cliente como en el servidor.
Lo que JavaScript no hace
Muchas veces se comienza a estudiar una tecnología o una aplicación con grandes expectativas y después de a poco nos vamos dando cuenta de sus limitaciones, lo que suele generar desilusiones. Por este motivo queremos que el lector tenga conciencia de los límites de JavaScript desde el primer capítulo, dado que esto también forma parte del aprendizaje del lenguaje.
El ámbito del lenguaje es el navegador cliente y eso trae consigo un potencial enorme para los desarrolladores pero ya define alguna de las limitaciones: JavaScript por sí solo no puede escribir información en la base de datos del servidor.
JavaScript puede colaborar en la creación de sitios web dinámicos pero no puede hacerlo sin la ayuda de un lenguaje de servidor (PHP, ASP.NET, etc.). Casi todas las aplicaciones web de importancia utilizan como soporte de la información bases de datos en el servidor (MySQL, Oracle, SQL Server, etc.) y esa gestión queda fuera del alcance JavaScript.
JavaScript es un mecanismo para mejorar la experiencia de navegación en el cliente pero lo que sucede en el servidor le queda fuera de ámbito. |
El ámbito natural de JavaScript es el cliente, entonces ¿la máquina del cliente está a disposición de JavaScript?
La respuesta rápida es: no. Pero veamos los detalles.
Cabe señalar que por razones de seguridad de los usuarios a JavaScript no se le permite hacer cualquier cosa dentro del ordenador del cliente. Los desarrolladores de los navegadores dan prioridad absoluta a la seguridad de los usuarios dado que si no lo hiciesen así las posibilidades de éxito de un navegador serían nulas. La mayor seguridad siempre es un argumento que habla a favor de un producto de software y en el caso de los navegadores queda de manifiesto en estos puntos que limitan la funcionalidad de JavaScript:
- No puede acceder a los archivos almacenados en el cliente
- No puede averiguar qué software tiene instalado el ordenador (excepto el tipo de navegador y del sistema operativo)
- No tiene acceso a la lista de enlaces favoritos del cliente
- No tiene acceso a las contraseñas almacenadas
- No puede acceder a la libreta de direcciones del usuario
- No tiene acceso a datos personales (sólo a los introducidos en el formulario de la aplicación vigente de la que JavaScript forma parte)
- No puede realizar lecturas de páginas de otro dominio diferente al que pertenezca su página
- No puede modificar el contenido de un sitio externo
- No puede autorizar la instalación automática de programas ejecutables
Frecuentemente se detectan fallos de seguridad en los navegadores, por este motivo es conveniente mantener actualizadas sus versiones. |
Día a día nuestros equipos se ven amenazados con distintas clases de software indeseado: virus, worms, troyanos, espía, phishing, etc.: esto se combate con software específico de protección (antivirus, antispam, firewall, etc.) y manteniendo actualizado nuestro software de base (sistema operativo y programas, como el navegador y el cliente de correo). Actualmente el riesgo que va en alza es el del "phishing": el robo de información personal que se suele realizar generalmente a través de componentes ActiveX que se instalan en el ordenador de modo consentido por el usuario por el deseo de visualizar alguna página y a veces hasta sabiendo del riesgo que se corre. La curiosidad por obtener algún contenido puede más que la precaución. No son pocas las veces que un usuario confirma la instalación de un componente a pesar de la advertencia del sistema operativo, dado que la página promete mostrar algo muy interesante (lo que después no siempre ocurre, con el agravante que además el software maligno ya quedó instalado).
Como desarrolladores muchas veces nos vemos obligados a visitar sitios desconocidos para obtener información sobre fallos o incidencias de software, sitios que, por experiencia propia, generalmente prometen más de lo que dan. Esos sitios, juntos con otros que ofrecen contenido muy atractivo para muchos (juegos, vídeos, fotos, etc.) suelen ser los grandes propagadores de malsoftware y deberíamos denegarles cualquier petición de instalación de componentes. Esta conducta deberíamos difundirla entre nuestro equipo de desarrollo y entre nuestros clientes.