Blog
Joan Galtés i Moreno

El módulo Key puede ayudarte a mejorar la seguridad de tu Drupal

Menora la seguridad de tu Drupal com el módulo Key
Drupal es uno de los gestores de contenidos más seguros que existen, pero no es perfecto y, a veces, es necesario ser especialmente cuidadoso con ciertos datos sensibles. En este artículo te mostramos cómo almacenar de manera segura datos sensibles en tu sitio web.

La seguridad es una característica fundamental de cualquier CMS moderno. Drupal tiene un sistema de autenticación y control de acceso basado en roles (RBAC) bien definido que limita el alcance de las acciones que los usuarios pueden realizar. Muy pronto, incluso tendremos el control de acceso basado en políticas (PBAC) en el núcleo de Drupal.

Pero, ¿qué pasa con la seguridad de otros elementos como los tokens de API, los certificados SSL o las claves que se utilizan para autenticarse con servicios externos que posibilitan funcionalidades que requieren autorización?

Por defecto, todos los datos de configuración se almacenan en archivos de configuración en Drupal. Drupal no es consciente por defecto de qué valores son sensibles o seguros por naturaleza; esto significa que con módulos adicionales que recopilan claves de API o autorización, esos valores podrían acabar en tu configuración/base de datos y repositorio de código, lo que plantea un riesgo de seguridad en caso de filtraciones. Tu seguridad es tan fuerte como tu punto más débil, pero afortunadamente en Drupal esto se puede resolver fácilmente con el módulo Key.

↑ Tornar a dalt

El módulo Key 

El módulo Key para Drupal ayuda a los desarrolladores a almacenar sus tokens de API y claves sensibles de una manera más segura que almacenarlos en las metadatos de configuración por defecto de Drupal. También ofrece una interfaz de usuario sencilla para crear y editar definiciones de claves en el administrador, lo que facilita la auditoría o los cambios sin tener que tocar el código de implementación.

Algunos ejemplos de dónde se podría encontrar esto son:

  • Certificados seguros para proveedores de SSO (inicio de sesión único)
  • Tokens de API para integración con servicios externos
  • Credenciales para servidores de correo SMTP
  • Certificados seguros que pueden ser necesarios en solicitudes de API con un cliente HTTP
  • Servicios propietarios internos que requieren autorización para ser utilizados

Incluso si la clave o el token no es inherentemente seguro, por ejemplo, si se utiliza en JavaScript del lado del cliente, el módulo Key sigue siendo una excelente manera de gestionar esta información.

El módulo Key cumple fácilmente con estas necesidades y ofrece cuatro formas diferentes de hacer referencia a secretos:

  • Configuración: el método por defecto, que exporta valores puros a la configuración. Las claves se siguen, pero no son seguras. En ausencia de algo más, este método no se recomienda, pero aún existe para que puedas gestionar tus claves en el administrador.
  • Archivo: este método te permite almacenar un secreto en un archivo ubicado en el servidor web fuera de la ruta web donde no se puede acceder públicamente. Lo único que almacena la clave es la ruta del archivo, y el módulo Key es responsable de recuperar el valor entre bastidores cuando lo necesites.
  • Variable de entorno: este método te permite asignar una variable de entorno como valor secreto. Al igual que el método del archivo, el módulo Key es responsable de recuperar el valor entre bastidores cuando lo necesites.
  • Externo: este método te permite hacer referencia a secretos en proveedores externos mediante una API. Este método se considera el más seguro, debido a los niveles de seguridad que estos servicios de almacenamiento proporcionan.
↑ Tornar a dalt

Uso del módulo Key 

El uso del módulo Key es sencillo. Al habilitar el módulo, se agrega una nueva sección en la sección de administración donde puedes crear nuevas claves.

La mayoría de las necesidades básicas para los tipos de claves están cubiertas por defecto. Estas cubren la mayoría de los casos de uso comunes para los tipos de claves, pero en caso de que necesites algo diferente, puedes extender el módulo Key y crear tu propio tipo de proveedor para presentar opciones adicionales.

Por ejemplo, se puede utilizar el directorio oculto nobackup disponible en el alojamiento de Acquia. Otros proveedores podrían ofrecer algo similar. Esta ubicación no es legible ni descubierta mediante medios públicos. El archivo anterior contiene el valor puro que el módulo Key recupera cuando se utiliza.

Una vez que se ha creado una clave, se puede hacer referencia en módulos que tienen integración con el módulo Key. Y es que integrar tu código personal con el módulo Key es fácil. Quizás tengas código que recoja un token de API como un campo de texto, por ejemplo. El módulo Key proporciona un tipo de elemento de formulario 'key_select' que gestiona muchos detalles repetitivos y que es fácil de usar:

$form['example_key'] = [ 
  '#title' => $this->t('Stripe Development Account Key'), 
  '#description' => $this->t('The account key to use for Stripe calls on the development instance.'), 
  '#type' => 'key_select', 
  '#key_filters' => ['type_group' => 'authentication'], 
  '#empty_option' => $this->t('- Select -'), 
  '#required' => TRUE, 
]; 

El elemento de formulario 'key_select' establece automáticamente una lista desplegable con un texto sobre dónde crear una nueva clave si no hay ninguna en la lista. Además, podemos utilizar el parámetro 'key_filters' para limitar qué tipos de claves se pueden seleccionar aquí para mayor seguridad adicional. En este ejemplo, solo se permiten claves de tipo 'autenticación' para limitar las opciones y evitar errores, como que alguien seleccione accidentalmente un tipo de certificado SSL.

Esto crea un patrón realmente sencillo para reutilizar en todo el código personal y aprovechar todo lo que ofrece el módulo Key.

Si tienes un secreto que no encaja en ninguno de los ejemplos predefinidos, hay muchos complementos para ampliar el módulo Key y darles soporte. Por ejemplo, los módulos Key AWS y Asymmetric Key añaden formas de almacenar credenciales de AWS o pares de claves públicas/privadas, respectivamente. Al igual que estos módulos, puedes crear tu propio proveedor para capturar los datos y requisitos que necesitas.

↑ Tornar a dalt

Conclusión

La seguridad es un panorama difícil y que cambia constantemente. Afortunadamente, el módulo Key puede ayudar a aliviar algunas de estas preocupaciones y evitar que secretos y tokens se multipliquen a lo largo de un código y se filtren accidentalmente, causando una violación de seguridad. 

↑ Tornar a dalt

Sobre el autor

Joan Galtés i Moreno

Desarrollador full-stack, especializado en Drupal desde 2008. Me gusta concebir y desarrollar tanto el back-end como el front-end en todos mis proyectos. Entusiasta de las nuevas tecnologías, con un buen dominio de PHP, MySQL, Git, Javascript, HTML 5, SASS y CSS 3, poniendo siempre el énfasis en la usabilidad y la accesibilidad en todo aquello que desarrollo.

Compartir

Deja tu comentario