Spaces:
Sleeping
Sleeping
Commit History
-
IP real detrás del proxy y caché de papers atómica y acotada
Jose Salazar +1: Claude Opus 5ARCHITECTURE_REVIEW §2.6 y §2.5. PROXY (§2.6). El limitador usaba `request.client.host`, que detrás de un proxy —HF Spaces tiene uno— es la dirección del PROXY. `limite_login` (5/minute) y `limite_papers` no eran por IP sino GLOBALES: a la vez un bypass (fuerza bruta desde muchas IPs contra un único contador) y una auto-denegación de servicio (un cliente ruidoso agota el login de todos). El throttle por email+IP de `auth.py` tenía el mismo problema. `X-Forwarded-For` NO se lee a ciegas: la manda el cliente, y creérsela permite falsificar la IP en cada petición. El operador declara cuántos proxies hay delante (`MORPHOS_PROXY_SALTOS_CONFIABLES`, 0 por defecto) y se toma el elemento -N, que es el último escrito por infraestructura de confianza; lo que hay a la izquierda lo controla el cliente y se descarta. Aviso al arrancar si en prod sigue a 0, porque el fallo es silencioso: los límites "funcionan", sólo que compartidos. CACHÉ DE PAPERS (§2.5). Tres fallos: - `write_text` no es atómi…5118fc3