Si recién está comenzando su desarrollo web o el viaje de Node.js, es posible que no sepa cuán importante es proteger su aplicación.
Express.js proporciona una solución eficaz para crear aplicaciones web back-end, pero se queda corto en cuanto a seguridad. Cuando está creando una aplicación web, necesita medidas de seguridad adecuadas para proteger los datos de sus usuarios.
Afortunadamente, existen métodos que puede tomar para mejorar la seguridad de sus aplicaciones Express.js. Todos estos consejos ayudarán a reforzar la seguridad de sus aplicaciones utilizando diferentes enfoques.
Configurar una aplicación Express.js
Comience configurando una demostración Servidor web Express.js usando npm, el administrador de paquetes de nodos. Cree una carpeta de proyecto localmente y cambie el directorio a ella en su terminal.
mkdir express-proyecto
proyecto cd express
A continuación, cree un paquete.json archivo en el directorio raíz.
npm inicializar -y
Continúe e instale Express.js.
npm instalar express
Finalmente, crea un servidor.js archivo en el directorio raíz de la carpeta de su proyecto y agregue el siguiente código para configurar un servidor web básico.
constante expresar = requerir("expresar")
constante aplicación = expreso()
constante PUERTO = proceso.env. PUERTO || 5000aplicación.obtener("/", (requerido, res) => {
res.json("¡Hola Mundo!")
})
app.escuchar (PORT, () => {
consola.registro(`Iniciando el servidor en http://localhost:${PORT}`)
})
Inicie el servidor con este comando:
nodo servidor.js
Ahora está listo para explorar algunas de las medidas que puede usar para proteger su aplicación Express.js.
1. Protección de aplicaciones de Express.js con casco
Casco es un middleware de Node.js que ayuda a proteger las aplicaciones del lado del servidor mediante la configuración de varios encabezados de seguridad HTTP. Estos encabezados proporcionan mecanismos de defensa esenciales contra vulnerabilidades comunes de seguridad de back-end, como secuencias de comandos entre sitios (XSS), falsificación de solicitudes entre sitios (CSRF) y muchas más.
Express.js no configura los encabezados de seguridad HTTP de forma predeterminada, lo que deja una posible falla de seguridad que expone los encabezados potencialmente confidenciales. Con esta información, los actores maliciosos pueden obtener acceso no autorizado o interrumpir su aplicación.
Helmet actúa como un escudo vital, asegurando que las respuestas HTTP de la aplicación adopten las medidas de seguridad necesarias, reduciendo significativamente la superficie de ataque potencial.
Explorando la seguridad de las aplicaciones Express.js sin casco
Con el servidor en ejecución, examine los encabezados de la aplicación. Siga adelante y hacer solicitudes HTTP a la API usando Postman o cualquier otro cliente que muestre encabezados de respuesta. La mayoría de los navegadores incluyen un conjunto de herramientas de desarrollo que le permitirán hacerlo.
Cuando envía solicitudes al extremo de origen, debe observar resultados similares en el Encabezados sección de la respuesta dentro de Postman.
Observe la X-Powered-By encabezamiento. Por lo general, las tecnologías de back-end usan este encabezado para indicar el marco u otro software que impulsa la aplicación web. Por lo general, debe quitar el X-Powered-By cabecera en un entorno de producción.
Al hacerlo, evitará que los atacantes potenciales obtengan información valiosa que podrían usar para explotar las vulnerabilidades conocidas asociadas con su pila de tecnología.
Probar la configuración de seguridad del servidor Express.js
Para evaluar el estado de seguridad de sus aplicaciones, utilizaremos el Encabezados de seguridad herramienta en línea. Esta aplicación está diseñada específicamente para evaluar la configuración de seguridad de los encabezados HTTP para aplicaciones del lado del cliente y del lado del servidor.
Primero, debe hacer que su servidor Express.js local sea accesible a través de Internet. Hay dos enfoques posibles para lograr esto: implementar su aplicación Express.js en un servidor en la nube o utilizar ngrok.
Para usarlo, descargar el ngrok zip, extraiga el ejecutable e inicie la aplicación. Luego, ejecute el siguiente comando para alojar su servidor Express.js local con ngrok.
ngok http 5000
ngrok generará una breve información que se ve así:
Copia lo proporcionado URL de reenvío y pegarlo en el Encabezados de seguridad' cuadro de entrada, y haga clic en el Escanear botón.
Una vez que se complete la evaluación de seguridad, debería recibir un informe similar.
Según el informe, es evidente que el servidor Express.js recibió una mala F calificación. Esta calificación baja es el resultado de la ausencia de encabezados de seguridad HTTP esenciales en la configuración del servidor; su ausencia deja al servidor vulnerable a posibles riesgos de seguridad.
Integrar Helmet en la aplicación Express.js
Ahora, continúe e integre Helmet en su aplicación Express.js. Ejecute el siguiente comando para instalar la dependencia.
npm instalar casco
Actualice su archivo server.js e importe Helmet.
constante casco = requerir("casco")
Ahora, agregue Helmet a su aplicación Express.js.
app.use (casco())
Finalmente, active el servidor de desarrollo, copie el enlace de reenvío de de ngrok terminal y péguelo en el Cabecera de seguridad campo de entrada para volver a escanear el servidor local. Una vez que se complete la nueva exploración, debería ver resultados similares a estos:
Después de integrar Helmet, Express.js incluye varios encabezados de seguridad esenciales en la respuesta HTTP. Esta mejora sustancial hizo que la aplicación Express.js pasara a ser una A calificación.
Si bien Helmet no es una solución infalible, mejora significativamente la seguridad general de su aplicación Express.js.
2. Protección de aplicaciones Express.js mediante Joi, una biblioteca de validación de entrada
Joi es una biblioteca de validación de entrada que ayuda a proteger las aplicaciones Express.js al proporcionar una forma conveniente de validar y desinfectar la entrada del usuario. Al definir esquemas de validación con Joi, puede especificar la estructura esperada, los tipos de datos y las restricciones para los datos entrantes.
Joi valida la entrada contra el esquema definido, asegurándose de que cumpla con los criterios especificados. Esto ayuda a prevenir vulnerabilidades de seguridad comunes, como inyección de datos, secuencias de comandos entre sitios (XSS) y otros ataques de manipulación de datos.
Siga estos pasos para integrar Joi en su aplicación.
- Instala Joi.
npm instalar joi
- Importe Joi en su archivo server.js.
constante Joi = requerir('joi');
- Cree un esquema de validación de datos de Joi que defina la estructura esperada y cualquier restricción para los datos de entrada.
constante esquema = Joi.objeto({
correo electrónico: Joi.string().email().required(),
contraseña: Joi.string().min(5).max(16).requerido()
}); - Valide todos los datos entrantes utilizando el esquema definido.
constante { error, valor } = esquema.validar (req.cuerpo);
si (error) {
// Manejar el error de validación
// Por ejemplo, devolver una respuesta de error
devolver res.status(400).json({ error: error de detalles[0].mensaje });
}
Al implementar estos pasos, puede aprovechar las capacidades de validación de entrada de Joi para proteger sus aplicaciones Express.js. Esto garantizará que los datos entrantes cumplan con las restricciones definidas, lo que evitará posibles amenazas de seguridad de manipulación de datos.
3. Protección de aplicaciones Express.js mediante el mecanismo CORS
El uso compartido de recursos entre orígenes (CORS) es un mecanismo que utilizan los servidores web para administrar qué orígenes (clientes u otras aplicaciones del lado del servidor) pueden acceder a sus recursos protegidos. Este mecanismo ayuda a proteger contra solicitudes de origen cruzado no autorizadas, evitando problemas como los ataques de secuencias de comandos entre sitios (XSS).
Para proteger las aplicaciones Express.js mediante CORS, siga estos pasos:
- Instale el paquete CORS.
npm instalar cors
- Requerir y usar el middleware CORS en el archivo server.js.
constante corazones = requerir('corazón');
app.use (cors());
Al integrar el middleware CORS en su aplicación Express.js, habilita el uso compartido de recursos entre orígenes. Esto garantiza que mitiga los posibles riesgos de seguridad relacionados con las solicitudes de origen cruzado.
Protección de aplicaciones del lado del servidor con facilidad
Puede usar una o más de estas medidas esenciales para mejorar la seguridad de sus aplicaciones Express.js.
Si bien hay muchas medidas y enfoques disponibles para proteger sus aplicaciones del lado del servidor, la conclusión clave es que debe priorizar la seguridad durante todo el ciclo de vida del desarrollo. Esta es una tarea que comienza en la fase de diseño y debe continuar hasta la implementación.