Puede agregar dinámicamente el token CSRF a los formularios a través de JavaScript. Pero debes tener en cuenta un par de problemas:
- Si tiene formularios de dominio cruzado, debe tener cuidado de que su código JavaScript no les agregue tokens CSRF, ya que perdería el token.
- Si su aplicación requiere usuarios sin el mayor nivel de privilegio para crear formularios, entonces pueden realizar ataques CSRF ya que los tokens se agregarán automáticamente.
- La inyección de HTML conducirá a CSRF mediante la inyección de un formulario, lo que aumenta un poco el impacto de la inyección de HTML. De la misma manera, si permite un subconjunto de HTML para algunos usuarios, y su filtro tiene una vulnerabilidad que permite la creación de formularios, será vulnerable a CSRF.
No relacionado: los tokens CSRF siempre tienen que estar en dos lugares; el enfoque más común es almacenarlos en el lado del servidor en la sesión y, además, en otro lugar (por ejemplo, enviarlos en un formulario). Eso parece ser a lo que te refieres en tu pregunta. Con este enfoque, almacenar el token en una cookie en lugar de un formulario no funcionará (siempre se enviará y se validará con el token del lado del servidor). El almacenamiento del token en una cookie se usaría en lugar del almacenamiento del lado del servidor. Aún debe enviarlo, por ejemplo, a través del formulario.