Secure Angularjs. Que no te vulneren el JS.
Antonio Froufe Gutierrez Colaboraciones 18/01/2019
Como ya sabemos Angular es un framework de javaScript de código abierto utilizado para facilitar la creación de aplicaciones WEB que incluyen Modelo Vista Controlador, para que su desarrollo sea sencillo. Pero como todas las tecnologías no está exenta de poder ser atacada y con lo cual debemos de llevar una metodología de buenas prácticas en seguridad para minimizar los fallos en vuestras aplicaciones. Estas buenas prácticas serán las siguientes.
Utiliza la versión más reciente de AngularJS.
Como en todas las tecnologías que utilicemos para crear nuestro código, ya sea el entorno de desarrollo o cualquier otro framework, es siempre necesario utilizar la versión más reciente, puesto que tendrá corregidos los fallos y vulnerabilidades encontrados hasta el momento. También debemos estar a dia de nuevos parches de seguridad que puedan aparecer para tenerlos aplicados en nuestros desarrollos.
Ceñirse a expresiones y plantillas propias de AngularJS.
Si no somos escrupulosos a la hora de escribir nuestro código con las plantillas y expresiones de angular un atacante podría explotar un ataque del tipo XSS (cross-site scripting) para controlar nuestra aplicación.
Podemos utilizar plantillas del lado del servidor que estén adecuadamente verificadas para generar contenido dinámico, pero no para generar plantillas generadas por Angularjs. Una muy buena opción es diseñar nuestra aplicación de tal manera que los usuarios no puedan cambiar las plantillas del lado del cliente.
Solicitudes HTTP.
Siempre que una aplicación realiza solicitudes a un servidor existen posibles problemas de seguridad que deben bloquearse, servidor y cliente deben actuar para eliminar estas amenazas. Aunque Angularjs viene preconfigurado para eliminar estas amenazas debemos configurar el servidor backend para que ayude en esta labor.
Protección contra XSS ( Cross-site Scripting).
Este tipo de ataques permiten a un ciberdelincuente inyectar código malicioso en una WEB. Esta inyección puede robar datos de usuarios haciéndose pasar por un usuario legítimo, por eso hay que procurar que dicho código ingrese al DOM de la página puesto que un atacante podría ingresar “<script>“ y ejecutar esas acciones malintencionadas. Con lo cual es importantísimo filtrar todo el contenido que se inserte en nuestra aplicación, para lo cual Angular trata todas las entradas como no confiables bloqueando todos los valores inválidos, no debemos generar código fuente de la plantilla concatenando las entradas de usuario, como prevención debemos utilizar el compilador de plantillas.
Utilizar el compilador de plantillas offline.
Esta práctica nos previene de una vulnerabilidad llamada inyección de plantillas, además mejora mucho el rendimiento de nuestras plantillas.
Auditar nuestras aplicaciones.
En definitiva una aplicación construida mediante Angular debe de seguir los mismos principios en materia de seguridad que cualquier otra tecnología. Utilizando los métodos bypassSecurityTrust nos aseguraremos una capa mas de seguridad auditando los datos introducidos en ella, estos se llaman DomSanitizer:
-
bypassSecurityTrustHtml
-
bypassSecurityTrustScript
-
bypassSecurityTrustStyle
-
bypassSecurityTrustUrl
-
bypassSecurityTrustResourceUrl
Utilizar la intercepción de respuestas.
Algo muy útil a la hora de auditar nuestra aplicación Angularjs es realizar una intercepción de respuestas con el fin de conocer el comportamiento de la misma y corregir los posibles errores que pudiera tener. Antes de presentar los datos al usuario debemos ejecutar diversas acciones como es validar los datos introducidos, disponemos de un API llamado Response Interceptor con la que podemos lleva a cabo estas acciones de una manera sencilla, sin necesidad de realizar nosotros mismos el componente.
Otra buena práctica es utilizar autenticación basada en token, podemos realizarlo manualmente o utilizando alguna librería que nos facilite la labor como por ejemplo Satellizer. De esta manera nos aseguraremos que todas las peticiones pase por el interceptor validando de esta manera la sesión asegurándonos que la petición es realizada por un usuario legítimo.
Conclusión.
Angularjs está pensada para trabajar del lado de cliente y partiendo de la base que todo lo que se ejecute del lado del cliente es inseguro, deberemos además de realizar las anteriores recomendaciones, implementar toda la seguridad posible en nuestra aplicación del lado del servidor, por que de ella dependerá la base de la seguridad de la aplicación. La mejor seguridad que podemos darle a nuestros desarrollos es exponerla lo menos posible al lado del usuario y controlar todos los datos que éstos introduzcan.
Para más información https://angular.io.