en MVC o cualquier otra aplicación web sin estado
Tu terminología es bastante confusa. Cualquier aplicación que enfrenta el usuario es una jerarquía de patrones MVC. MVC rara vez es sin estado, de hecho, en los casos en que es sin estado (servidor), hay muy pocos riesgos de CSRF. Su pregunta es realmente acerca de la gestión de sesiones.
A falta de administración de sesión, la única forma que conozco para resolver el problema es a través de OTP, pero podría decirse que esta administración de sesión es ya que la OTP debe conservarse hasta que se use, y la información sobre la OTP modificada cuando se usa.
Si considera el caso de la publicidad de pago por clic: no está confiando en la información que proporciona el usuario, sin embargo, sí necesita realizar un seguimiento de los recuentos, por lo que la aplicación no deja de ser apática. Puede evitar la necesidad de mantener una sesión utilizando (por ejemplo) las huellas dactilares del navegador, pero luego debe mantener una lista (estado) de huellas dactilares que ya se considera que "hizo clic". La aplicación no es Ya sin estado con respecto al dispositivo cliente y hay una sesión. Realmente no es tan diferente de colocar una cookie en el navegador y leerla más tarde.
Dado que también resuelve muchos otros problemas, mantener una sesión al lado del servidor es la mejor solución.