Sumérgete en las solicitudes HTTP entre sitios
Antecedentes
Después de que el navegador Chrome se actualizó a 80, el valor predeterminado de la propiedad SameSite se cambió de Ninguno a Lax, lo que provocó que algunas de nuestras aplicaciones en línea sufrieran problemas repentinamente. .
¿Por qué afecta este cambio al sistema en línea? Permítanme describir primero las características de las aplicaciones afectadas:
Cuando se introdujo el sistema de terceros, adoptamos la solución Iframe en el momento. En ese momento, las páginas del sistema A (a.xx.cn) se cargan en el sistema B (b.com.cn) a través del Iframe.
Motivo de la excepción
Después del análisis, se descubrió que el sistema integrado B no podía leer las cookies que configuró, lo que provocó una serie de problemas.
¿No es extraño que las cookies configuradas por el sistema B no puedan leerse por sí solas?
¿Por qué?
Antes del análisis, primero debemos comprender el significado del atributo SameSite:
En pocas palabras, SameSite es un atributo del encabezado de respuesta y su valor determinará el acceso entre sitios. Si se permite el envío de cookies. SameSite tiene tres valores: Estricto, Laxo y Ninguno.
Tenga en cuenta que cuando lo describimos, siempre agregamos el prefijo "durante el acceso entre sitios". Entonces, ¿qué es entre sitios? Mucha gente lo confunde con dominio cruzado y los dos tienen una definición diferente.
Lista pública de sufijos
Es una lista de nombres de dominio de nivel superior, propuesta por primera vez por Mozilla y adoptada por los principales navegadores.
Para darle un ejemplo que le ayude a comprender, los dos sitios siguientes: a.teld.cn, b.teld.cn
Bueno, hasta ahora, hemos descubierto -diferencia de estación de dominio y entre dominios. La propiedad SameSite solo afecta el acceso entre sitios. Volvamos a la primera frase "Después de que el navegador Chrome se actualizó a 80, el valor predeterminado del atributo SameSite se cambió de Ninguno a Lax"
Entonces, ¿cómo era antes de la versión 80?
Antes de los 80, el valor predeterminado de SameSite era Ninguno, lo que significa que podemos enviar cookies durante el acceso entre sitios. Aquí hay un ejemplo (centrándose en el escenario de separación de front-end y back-end, el servidor escribe Cookie, ignórelo por ahora):
Antes de los 80, cuando era entre sitios, escribir y leer eran normal. Pero después de la década de 1980, el valor predeterminado de SameSite se cambió a Lax, por lo que, naturalmente, no se puede leer al cruzar sitios.
¿Cómo solucionarlo? La primera idea es establecer el valor predeterminado en Ninguno (cuando la versión 80 o superior requiere configurar Ninguno, se debe configurar Seguro)
Esto se resuelve para las versiones superiores a 80, pero ¿qué pasa con las versiones inferiores a 80? Tenemos que hablar sobre problemas de compatibilidad. Aquí están las instrucciones de actualización de Google (haga clic para ampliar para ver):
En pocas palabras: las versiones anteriores no pueden identificar correctamente Ninguno, y el comportamiento de cada navegador del sistema no lo es. consistente todavía. Algunos rechazarán directamente la cookie con SameSite=None, mientras que otros la interpretarán como SameSite=Strict, lo cual es bastante diferente de nuestras expectativas.
¿Cómo solucionarlo? La solución común actual es establecer una cookie más. Si los métodos de lectura y escritura de cookies están encapsulados, esta operación no tendrá ningún impacto en el negocio. El ejemplo es el siguiente:
Establecer una cookie más. leyendo, lea la primera prueba, si descubre que __test no se vuelve a leer.
Otra solución es utilizar la detección de UA para confirmar la lista negra del navegador y luego tratarla de manera específica.
Aunque las cookies duales son un desperdicio de recursos, considerando el complicado entorno de los navegadores domésticos, personalmente recomiendo la solución de cookies duales.
¿El problema se acabó por aquí?
Desde iOS y iPadOS 13.4, Safari ha agregado una función anti-seguimiento inteligente, como se muestra en la figura:
Y "Bloquear seguimiento entre sitios" está activado de forma predeterminada. lo que significa que rechazar todas las solicitudes entre sitios para enviar cookies puede entenderse como configurar SameSite=Strict, por lo que si se trata de un sistema ToC y se deben considerar los usuarios de Apple Safari, el procesamiento anterior tendrá fallas.
Resumen
Por lo tanto, la medida en que es necesario manejar los problemas entre sitios debe juzgarse en función de las características del propio sistema. Por ejemplo:
No existe una solución milagrosa en tecnología mientras tengamos un conocimiento profundo del mecanismo y los principios de las solicitudes entre sitios y adoptemos estrategias técnicas apropiadas en escenarios apropiados, los problemas entre sitios surgirán. eventualmente se solucione.