Por Manuel Arguedas Sandí – Estudiante de la carrera de Ingeniería Informática
Todos hemos escuchado a personas diciendo la frase: “Es que esa página web no es segura”, pero generalmente no se comprende el significado de esto, no se conoce por qué o el cómo. El conocimiento popular de las personas se limita a acceder a páginas web desde el buscador de preferencia o accediendo a ellas desde links que les comparten. Sin embargo, no saben que durante la carga de la página ocurren muchos eventos, algunas veces necesarios para aspectos de la página, pero en otros casos pueden traer scripts maliciosos que pueden comprometer la seguridad e integridad de sus sistemas o información personal. Esto requiere especial atención por parte de los desarrolladores de páginas para disminuir el riesgo por parte del usuario común que no tiene conocimientos sobre infraestructura de red o lenguajes de desarrollo.
Como explican Hedin, Bello y Sabelfeld (2016), cuando un usuario ingresa a una página web con JavaScript, el código de diferentes fuentes se descarga en el browser del usuario, manteniendo los mismos privilegios como si este código fuera parte de la misma página. Esto puede abrir una puerta a distintas problemáticas como abusos de confianza por ataques directos de scripts maliciosos o por ataques indirectos donde los scripts originales son sustituidos por los de un atacante u organización con fines poco éticos (Hedin, Bello y Sabelfeld, 2016). En una época donde la información es de las cosas que más relevancia y valor tienen, asegurarla es muy importante. Aunque pueda argumentarse que la seguridad debe darse desde el lado del usuario, o sea, la responsabilidad recae en el usuario, los desarrolladores de sitios web deben tomar en cuenta cierto grado de seguridad para no comprometer la integridad tanto de su sitio como de los clientes que acceden a ella, pues las personas en general no tienen los conocimientos para agregar seguridad por sus propios medios.
Algunos de los aspectos a tomar en cuenta al desarrollar en JavaScript son los siguientes:
1. Utilizar lenguaje JavaScript estrictamente: evitar malas prácticas de programación y seguir el estándar de lenguaje.
2. Dar importancia al contexto: el uso de variables y funciones debe hacerse con cuidado de no dar una exposición más allá de la necesaria, o, por el contrario, utilizarlas solamente en su ámbito para evitar confusiones por parte de la interpretación de la página o por parte de otros desarrolladores que podrían darle mantenimiento a nuestro código en un futuro.
3. Dar importancia al flujo dinámico: evitar la reutilización de nombres o referencias a objetos fuera de lugar.
4. Manejar adecuadamente los errores y excepciones, así como validar los datos de entrada: las validaciones en los campos de entrada son esenciales, evitando problemas como “Injections”, entre otros. Asimismo, se requiere dar un control adecuado a los errores que se presenten, ya sea durante la ejecución de código o debido a interacciones por parte de los usuarios, dándole el tratamiento adecuado para evitar mostrar errores no manejados o informando de manera apropiada al usuario cuando cometa un error.
5. Tener cuidado al integrar scripts de terceros: una de las ventajas principales de JavaScript es la facilidad para utilizar APIs o funciones desarrollados por terceros. Sin embargo, esto representa una serie de riesgos especialmente en el lado del servidor (Van Ginkel et al., 2019) que deben manejarse adecuadamente para evitar comprometer información propia o de los usuarios a la hora de interactuar con este tipo de código, por ejemplo, limitando los privilegios de las bibliotecas de terceros o al confinar código potencialmente vulnerable en aplicaciones back-end aparte.
La seguridad debe darse en todos los niveles, comenzando por los usuarios y terminando por los servidores. Nuestra labor como programadores es garantizar que nuestros desarrollos aparte de calidad tengan seguridad, minimizando la posibilidad de que nuestra página sea vulnerable a ataques por parte de terceros. Esto puede iniciarse siguiendo reglas básicas como las mencionadas en el desarrollo de este artículo.
MOXIE es el Canal de ULACIT (www.ulacit.ac.cr), producido por y para los estudiantes universitarios, en alianza con el medio periodístico independiente Delfino.cr, con el propósito de brindarles un espacio para generar y difundir sus ideas. Se llama Moxie - que en inglés urbano significa tener la capacidad de enfrentar las dificultades con inteligencia, audacia y valentía - en honor a nuestros alumnos, cuyo “moxie” los caracteriza.
Referencias bibliográficas:
-
Hedin, D., Bello, L. y Sabelfeld, A. (2016). Information-flow security for JavaScript and its APIs. Journal of Computer Security, 181-234.
-
Van Ginkel, N., De Groef, W., Massacci, F. y Piessens, F. (2019). A Server-Side JavaScript Security Architecture for Secure Integration of Third-Party Libraries. Security & Communication Networks, 1-21.