Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

810
Views
Obtención de ForbiddenError: token csrf no válido con multer agregado localmente al enrutador de carga de imágenes

Estoy usando csurf como se recomienda en mi aplicación Express para protegerme contra las falsificaciones entre sitios. Lo he registrado globalmente (ilustrado con el código a continuación) y hasta ahora todo bien.

Ahora, agregué multer.js para poder cargar imágenes y, como lo recomienda su documentación, es más seguro adjuntar multer a cada ruta rápida que pretenda usar.

Ahora, cuando adjunto multer a mis rutas de carga, me encuentro con un 'Error prohibido: token csrf no válido' y realmente no sé por qué, según mi opinión, estoy enviando el formulario, como un token csrf adjunto.

A continuación se muestra mi código y realmente agradecería cualquier ayuda/sugerencia. Gracias a todos

aplicación.js

 const express = require('express'); const csrf = require('csurf'); const csrfProtection = csrf(); const shopRoute = require('../Routes/shop'); const app = express(); app.use(csrfProtection); app.use(shopRoutes);

rutas.js

 const express = require('express') const router = express.Router(); const multer = require('multer'); const controllers = require('../Controllers/shop'); router.post('/upload', multer({storage: multer.memoryStorage(), fileFilter: fileFilter), controller.uploadFunction);
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Supongo que el problema es que cuando carga un archivo, el tipo de contenido de la solicitud se convierte en multipart/form-data , y ya no puede simplemente pasar el token csrf a Express en el cuerpo.

Sin embargo, la API permite pasarlo en la URL. Intente pasar el token en el parámetro _csrf , que creo que debería resolver su problema. Simplemente publique el formulario en .../?_csrf={your_token} . Sin embargo, tenga en cuenta que esto es un poco menos seguro que pasar su token csrf en el cuerpo de la solicitud, y podría marcarse como una vulnerabilidad potencial en pruebas de penetración posteriores si alguna vez tiene una.

Alternativamente, para un poco más de seguridad, también puede pasarlo como un encabezado de solicitud, pero eso podría ser un poco más complicado en el lado del cliente. De acuerdo con los documentos , Express tomará el token de lo siguiente:

 req.body._csrf - typically generated by the body-parser module. req.query._csrf - a built-in from Express.js to read from the URL query string. req.headers['csrf-token'] - the CSRF-Token HTTP request header. req.headers['xsrf-token'] - the XSRF-Token HTTP request header. req.headers['x-csrf-token'] - the X-CSRF-Token HTTP request header. req.headers['x-xsrf-token'] - the X-XSRF-Token HTTP request header.

Por lo tanto, agregar un csrf-token también debería funcionar.

Descargo de responsabilidad: no conozco multer.js en absoluto y tengo muy poca experiencia con Express.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!