Estaba implementando un mecanismo de protección CSRF para mi servidor cuando me di cuenta de que este ataque solo afecta realmente a los navegadores web. Me pregunto: ¿por qué debería molestarme en generar / validar tokens CSRF para clientes que no son navegadores?
La eliminación de dichas comprobaciones no solo simplificaría la implementación de los clientes REST, sino que también mejoraría la escalabilidad.
Estaba pensando en que todos los recursos HTML configuren una cookie browserId
que contenga un valor pseudoaleatorio criptográficamente fuerte que identifique al cliente como un navegador. Cualquier llamada a la API REST verificará esta cookie y, si está presente, aplicará la validación CSRF. De lo contrario, los cheques serían omitidos.
El valor de la cookie no es tan importante como su existencia. El servidor no almacena ni valida el valor, pero es útil para vincular tokens CSRF a un navegador específico (esto evita que un atacante pase su token CSRF a una víctima).
Mi pregunta es la siguiente:
- ¿Es posible diferenciar entre clientes de máquina a máquina (M2M) y de persona a máquina (H2M)? Si es así, ¿cuál es la mejor manera (es razonable el enfoque anterior)?
- ¿Es seguro diferenciar entre clientes M2M y H2M, incluso si podemos? ¿O esto nos abre a posibles ataques en el futuro?
- ¿Un atacante puede eliminar las cookies, asumiendo que controlo todos los subdominios y uso HTTPS?