es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de autorizar una sesión express en una solicitud POST?

Estoy tratando de confirmar que un usuario está realizando una solicitud de publicación para asegurarme de que nadie pueda simplemente publicar en la URL y hacer algo malicioso. ¿Cómo puedo hacer esto usando express-session? ¿O hay una mejor manera de hacerlo?

He intentado esto, pero supongo que la sesión no existe en la solicitud de publicación.

router.post('/delete', function (req, res, next) {
  if (req.session.user.role === 'owner') {
    // Autorizado
    // eliminar usuario aquí y redirigir
    res.redirect('/admin');
  } else {
    // No autorizado
    return res.redirect('/');
  }
})
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de confirmar que un usuario está realizando una solicitud de tipo POST y prevenir solicitudes maliciosas es utilizar una función de middleware para verificar los datos de la sesión antes de ejecutar el controlador de solicitud POST. Las sesiones de Express pueden almacenar datos relacionados con la sesión de un usuario, como ID de usuario o rol, que se pueden utilizar para autorizar las acciones del usuario.

    Aquí tienes un ejemplo de cómo implementar este middleware y usarlo para proteger una ruta POST:

    // Requerir express y express-session
    const express = require('express');
    const session = require('express-session');
    
    // Configurar la aplicación Express y el middleware de sesión
    const app = express();
    app.use(session({
      secret: 'mysecret', // cambiar esto por un secreto más seguro en producción
      resave: false,
      saveUninitialized: true
    }));
    
    // Definir la función de middleware para verificar los datos de la sesión
    function requireUserRole(role) {
      return function(req, res, next) {
        if (req.session && req.session.user && req.session.user.role === role) {
          next(); // Autorizado, continuar con el siguiente middleware o controlador de ruta
        } else {
          res.status(401).send('No autorizado'); // No autorizado, enviar respuesta 401
        }
      };
    }
    
    // Definir el controlador de ruta con el middleware de sesión
    app.post('/delete', requireUserRole('owner'), function(req, res) {
      // eliminar usuario aquí, luego redireccionar
      res.redirect('/admin');
    });
    

    En este ejemplo, la función de middleware requireUserRole recibe un parámetro de rol y devuelve una función que verificará que los datos de la sesión del usuario incluyan un objeto user con una propiedad role que coincida con el rol especificado.

    La línea app.post('/delete', requireUserRole('owner'), ...) define la ruta POST para eliminar un usuario y utiliza la función de middleware requireUserRole para asegurarse de que solo los usuarios con un rol de 'owner' puedan acceder a ella.

    Si un usuario intenta realizar una solicitud de tipo POST a la ruta /delete sin iniciar sesión o con un rol que no coincide con 'owner', recibirá una respuesta de error 401 No autorizado.

    Utilizar datos de sesión para autorizar acciones de usuarios de esta manera es una práctica común en el desarrollo web, pero es importante utilizar opciones de almacenamiento de sesiones seguras y cifrar cualquier información sensible. Además, puede ser necesario implementar otras medidas de seguridad, como la sanitización de la entrada y limitar la frecuencia de las solicitudes, para proteger completamente tu aplicación contra ataques maliciosos.

Comments are closed.