Dice "sesión": ¿tiene una sesión del lado del servidor? Si es así, ¿por qué no poner el token CSRF en la sesión en lugar de una cookie del lado del cliente? Ese es el patrón normal; evita que un atacante pueda usar su propio valor de token CSRF generado contra otro usuario en el caso de que tenga una corrección de cookies.
Otro enfoque similar al agua que no necesita una cookie adicional, si no tiene almacenamiento en el lado del servidor, es crear un valor que incluya el usuario o el ID de la sesión y firmarlo con un MAC (generalmente HMAC) con un lado del servidor secreto. El servidor puede verificar que el token en el formulario proviene del usuario cuya sesión es.
el atacante no puede leer ni establecer la cookie de un dominio que no posee
Bueno, probablemente ... por lo general. Formas en que la inyección de cookies tiende a suceder (aparte de XSS, en cuyo caso ya perdió mucho más):
- errores del navegador, tablas / reglas de "dominio genérico" obsoletas, etc.
- dominios vecinos vulnerables (por ejemplo, establecer una cookie en www.example.com desde test.example.com)
- permitir que su sitio se sirva desde un dominio atacante (siempre verifique el Nombre de host: es un nombre de dominio reconocido como bueno)
Estos suelen ser problemas marginales, pero dependen de factores potencialmente fuera de su control como autor de la aplicación. Por lo tanto, en el caso de los sistemas sensibles a la seguridad, generalmente es una buena idea no confiar en que sus cookies no sean fijables.