Protección CSRF
Corvis no incluye un middleware anti-CSRF (tokens sincronizados o double submit cookie). Tampoco tiene sesiones de servidor, que es donde esos tokens suelen guardarse.
Un ataque CSRF necesita que el navegador adjunte credenciales automáticamente, es decir, cookies. Según cómo autentiques, estas son las alternativas reales:
Si autenticas con Authorization: Bearer
Es el flujo de Autenticación con JwtModule. El navegador nunca añade esa cabecera por su cuenta, así que un sitio ajeno no puede forjar una petición autenticada. No necesitas protección CSRF adicional, siempre que no guardes además el token en una cookie.
Si autenticas con cookies
SameSite: emite la cookie consame_site("lax")osame_site("strict"). El navegador no la envía en peticionesPOSTdesde otros sitios.rust#[post("login")] #[http_code(204)] async fn login(&self, #[body] dto: LoginDto, #[res(passthrough)] res: Res) -> HttpResult<()> { let sid = self.auth.create_session(&dto).await?; res.cookie( "sid", &sid, CookieOptions::new().http_only(true).secure(true).same_site("lax"), ); Ok(()) }ResyCookieOptionsse importan decorvis(use corvis::{CookieOptions, Res};). Ver Cookies.Comprobar
Originen las peticiones que cambian estado. Un middleware global basta:rustapp.use_fn(|req, next| async move { let safe = matches!(req.method().as_str(), "GET" | "HEAD" | "OPTIONS"); if !safe { let allowed = req.header("origin").is_none_or(|o| o == "https://app.example.com"); if !allowed { return Err(ForbiddenException::new("Invalid origin")); } } next.run(req).await });Los navegadores envían
Originen las peticionesPOST,PUT,PATCHyDELETEentre orígenes. Las peticiones sinOrigin(clientes que no son navegadores) pasan.CORS restrictivo: con
credentials(true), usa una lista explícita de orígenes. CORS no impide que se envíe un formulario, pero sí que una página ajena lea la respuesta. Ver CORS.
WebSockets
Un gateway que autentica por cookie es vulnerable a Cross-Site WebSocket Hijacking. Limita los orígenes con GatewayOptions::allowed_origins, que responde 403 en el handshake a un Origin que no está en la lista. Ver Gateways.