Si utiliza Administrador activo, Administrador de rieles, administrado o si simplemente tiene un back-office en su aplicación Rails, entonces debe hacerlo secreto. Porque, sí, usar la ruta /admin para su back-office está casi al mismo nivel que usar contraseña como contraseña.
Al programa :
Hola y bienvenidos a la 5ª edición de Ruby Biscuit.
Ya tienes 77 suscriptores 🥳 Si aún no estás registrado:
Hace unos años un cliente nos preguntó si era posible cambiar la URL de su back-office para no acceder tan fácilmente como con /admin
. Al hacer este cambio nos dimos cuenta que la idea era buena y que permitía hacer nuestras plataformas más seguras de una forma muy sencilla. De hecho, no queremos que nadie pueda aterrizar en la página de inicio de sesión de una oficina administrativa. Por lo tanto, la nueva regla es: todas las rutas de back-office tendrán un prefijo con una palabra “atípica” que debe ser casi imposible de encontrar para cualquiera que no necesite tener acceso a ella.
Resultado: durante una auditoría de seguridad reciente, nuestro back-office no fue detectado por las pruebas de penetración en caja negra y caja gris 🕵️
Es bastante práctico para evitar infiltraciones por la puerta trasera 🚪
Le mostraré los cambios realizados en nuestras plataformas y nuestras opciones de implementación.
Así es como se ve nuestro archivo config/routes.rb
Actualmente :
Tenemos rutas de Devise para nuestro administrador, rutas de Active Admin y también una ruta para que un administrador registrado acceda al panel de Sidekiq.
Para el ejemplo, empiezo desde una aplicación Rails con Devise, Active Admin y Rspec.
Como buena práctica y con el fin de documentar y guiar nuestra implementación, comencemos escribiendo nuestras pruebas.
Quiero asegurarme de que la página de inicio de sesión de back office no se pueda encontrar con la URL /admin
pero por otro lado todo funciona con mi prefijo.
Elegiremos el prefijo “rubyscuit” para el ejemplo 😉
También quiero que mi panel de Sidekiq no me redirija a la página de inicio de sesión de la oficina administrativa cuando ningún administrador haya iniciado sesión. Volveremos a esta parte con más detalle. Mientras tanto, aquí están las pruebas:
La idea aquí es prefijar las rutas Active Admin y Currency del back-office, para que no se puedan encontrar.
Para ello hemos decidido prefijar nuestras rutas. Podríamos haber optado por modificarlos, pero preferimos mantener la noción de administrador.
Para prefijar un grupo de rutas con Rails, hay diferentes opciones que incluyen espacios de nombres y los alcances.
Es importante entender la diferencia porque afecta la estructura de nuestra aplicación.
El espacio de nombres prefijará la ruta URL y buscará ubicar un controlador bajo un módulo con el mismo nombre que el prefijo elegido.
Con el siguiente código en config/routes.rb
Aquí hay un ejemplo de las rutas que obtenemos:
Nuestras rutas tienen el prefijo “rubyscuit” en la ruta URI y Rails espera que nuestros controladores (excepto Devise) estén en un módulo con el mismo nombre: Rubyscuit::Admin::Dashboard#index
.
El alcance es diferente porque no afecta la ruta del recurso.
Estas son las rutas generadas:
Como se puede observar /rubyscuit
se agregó como prefijo, pero nuestros controladores no necesitan estar en un módulo.
Por lo tanto, hemos optado por utilizar ámbitos para no sobrecargar la aplicación con módulos innecesarios. Nuestro objetivo es solo que el camino a la oficina administrativa no se pueda adivinar. Ya está hecho.
Gracias a este alcance, mi URL para la página de inicio de sesión ahora es: /rubyscuit/admin/login
y aparte de ti, ¡nadie lo adivinará!
¡No ha terminado! Recuerda que tenemos este camino /sidekiq
para acceder al panel de Sidekiq cuando iniciamos sesión como administrador.
Esta ruta que se usa con frecuencia en las aplicaciones Rails equipadas con Sidekiq nos preocupa: cuando una persona que no está conectada intenta acceder a ella, se redirige automáticamente a la página de inicio de sesión del back office. Depende del ayudante authenticate
de Moneda que nos debe este comportamiento.
Cualquiera que intente acceder al tablero podrá aterrizar en la página de inicio de sesión del back-office y así descubrir la URL prefijada.
La primera solución podría ser poner esta ruta en nuestro alcance “rubyscuit”.
En Capsens algunos lo hacen, otros no. Aquellos que no consideran que a pesar de que el tablero solo es accesible para un administrador, no debe mezclarse con las rutas de nuestro back office, sino también por el deseo de mantener esta ruta simple. /sidekiq
. Eres libre de elegir tu estrategia.
Asumiendo que no queremos poner esta ruta en nuestro alcance, solo cambiaremos el ayudante authenticate
por otra: authenticated
.
La diferencia es sencilla, authenticated
permite el acceso a una ruta en base a la autenticación de nuestro administrador. En otras palabras: mientras no haya administrador, no hay ruta. Al intentar acceder a él ya no seremos redirigidos sino que nos encontraremos con un 404.
Ayudantes de moneda en cuestión
Versión final de nuestras rutas:
¡Ahora, no más oportunidades de encontrar el back-office!
Para descubrir nuevos consejos de Ruby on Rails todos los miércoles a las 4 p. m., no busque más, ¡ha venido al lugar correcto!
Nos vemos la próxima semana 😉
melanie