logo
GeekFormat

Analitzador de Set-Cookie

Set-Cookie Parser

Enganxa capçaleres de resposta Set-Cookie de diverses línies per inspeccionar els atributs i assenyalar combinacions SameSite / Secure de risc.

Targetes d'Atributs de Cookie

2 Set-Cookie
#1sessionabc123
path/
httponly(indicador)
secure(indicador)
samesiteLax
No s'han trobat problemes evidents d'atributs
#2preview1
max-age600 (10m 0s)

setCookieParser.attr.maxAgeHint

samesiteNone
secure(indicador)
setCookieParser.warn.missingHttpOnlysetCookieParser.warn.missingPath

Vista Prèvia de JSON

[
  {
    "index": 0,
    "raw": "session=abc123; Path=/; HttpOnly; Secure; SameSite=Lax",
    "name": "session",
    "value": "abc123",
    "decodedValue": "abc123",
    "attributes": [
      {
        "key": "path",
        "value": "/"
      },
      {
        "key": "httponly",
        "value": null
      },
      {
        "key": "secure",
        "value": null
      },
      {
        "key": "samesite",
        "value": "Lax"
      }
    ],
    "attributeMap": {
      "path": "/",
      "httponly": true,
      "secure": true,
      "samesite": "Lax"
    },
    "warnings": []
  },
  {
    "index": 1,
    "raw": "preview=1; Max-Age=600; SameSite=None; Secure",
    "name": "preview",
    "value": "1",
    "decodedValue": "1",
    "attributes": [
      {
        "key": "max-age",
        "value": "600"
      },
      {
        "key": "samesite",
        "value": "None"
      },
      {
        "key": "secure",
        "value": null
      }
    ],
    "attributeMap": {
      "max-age": "600",
      "samesite": "None",
      "secure": true
    },
    "warnings": [
      "warn.missingHttpOnly",
      "warn.missingPath"
    ]
  }
]

Enganxa la capçalera Set-Cookie i descobreix immediatament per què el navegador no accepta la cookie.

Relacionats

Casos d'ús

  • Quan el navegador rebutja escriure una cookie, identifica ràpidament si és un problema de política SameSite, manca de l'indicador Secure o desajustament de Path/Domain
  • En escenaris d'inici de sessió de tercers/SSO/incrustació en iframe on les cookies són bloquejades pel navegador, comprova si SameSite=None s'acompanya correctament de Secure
  • Durant auditories de seguretat, comprova massivament si les cookies retornades per les API tenen totes HttpOnly per prevenir robatori per XSS, i si tenen Secure per prevenir transmissió en clar per HTTP
  • En utilitzar cookies amb prefixos __Host-/__Secure-, verifica que compleixin els requisits obligatoris de RFC 6265bis per evitar que el navegador les descarti silenciosament
  • En depurar solucions de particionat de cookies de tercers CHIPS (Partitioned Cookie), confirma que Partitioned i Secure es declaren conjuntament
  • Quan el servidor configura Max-Age/Expires, assegura't que el valor sigui vàlid per evitar que la cookie caduqui immediatament per desviació de rellotge o Max-Age=0
  • Compara diferències en les capçaleres Set-Cookie entre diferents entorns (desenvolupament/prova/producció) per resoldre problemes estranys on les cookies funcionen en desenvolupament però es perden en producció
  • Copia seccions senceres de capçaleres de resposta des de DevTools o respostes curl, sense necessitat d'eliminar manualment el prefix Set-Cookie:, l'eina ho reconeix i elimina automàticament
  • En escriure documentació d'API o resoldre bugs relacionats amb peticions WASM/WebWorker, enganxa directament els resultats JSON analitzats a la documentació per explicar l'estructura de les cookies

Característiques

  • Anàlisi independent de múltiples cookies: cada Set-Cookie per línia es presenta en una targeta independent, amb numeració que mostra el nom, el valor i el valor descodificat d'URL, per identificar ràpidament quina cookie té problemes
  • 14 controls de seguretat d'atributs: detecta automàticament errors comuns com SameSite=None sense Secure, valor SameSite no vàlid, Partitioned sense Secure, manca d'HttpOnly, manca de Path, manca de SameSite, infracció del prefix __Host-, prefix __Secure- sense Secure, Max-Age no vàlid/igual a 0, Domain que comença amb punt, Expires sense Max-Age, etc.
  • Desglossament complet de tots els atributs: SameSite, Secure, HttpOnly, Path, Domain, Expires, Max-Age, Partitioned es llisten detalladament, amb atributs de tipus flag i atributs amb valor clarament diferenciats
  • Conversió automàtica de Max-Age: converteix automàticament els segons a temps llegible per humans en dies/hores/minuts/segons, per exemple Max-Age=2592000 es mostrarà com 30d
  • Visualització automàtica del valor descodificat d'URL: quan el valor de la cookie conté codificació %XX, mostra automàticament el text original descodificat (per exemple sessionID%3Dabc → sessionID=abc), marcat amb una fletxa verda
  • Detecció de prefixos RFC 6265bis: valida estrictament els requisits de compliment per a cookies amb prefixos __Host- i __Secure-, incloent Path=/ , prohibició de Domain i obligatorietat de Secure
  • Còpia de la capçalera original amb un sol clic: copia totes les línies originals de cookies analitzades per enganxar-les fàcilment en correus electrònics, tiquets Issue o documents per compartir amb l'equip
  • Vista prèvia JSON estructurada: els resultats de l'anàlisi admeten sortida en format JSON, amb camps complets com name/value/decodedValue/attributes/attributeMap/warnings, que es poden utilitzar directament en scripts i casos de prova
  • Processament totalment local: el contingut de Set-Cookie s'analitza localment al navegador, sense pujar cap dada a cap servidor, evitant filtrar informació sensible com sessions o tokens
  • Insígnies d'advertència intel·ligents: cada problema es marca amb una insígnia d'advertència taronja que indica la causa específica, sense necessitat de consultar la documentació de la RFC article per article
  • Entrada massiva de múltiples línies: enganxa una secció sencera de capçaleres de resposta d'una vegada (per exemple copiant del panell Network de Chrome DevTools), elimina automàticament el prefix Set-Cookie: i analitza línia per línia
  • Admet valors entre cometes i amb punt i coma: processa correctament els valors de cookie entre cometes dobles segons l'especificació RFC i els punts i comes en dates Expires, sense divisions errònies

Com usar-ho

  1. Obre el panell Network de DevTools del navegador, troba la petició objectiu i copia el contingut de Set-Cookie a la secció Response Headers (admet múltiples línies, copia totes les cookies d'una vegada)
  2. Enganxa les capçaleres de resposta Set-Cookie copiades a l'àrea d'entrada, una cookie per línia (no cal eliminar manualment el prefix Set-Cookie:, l'eina ho farà automàticament)
  3. L'eina analitza en temps real, mostra a la part superior el nombre de Set-Cookie reconeguts i a la part inferior cada cookie en una targeta d'atributs independent
  4. La capçalera de la targeta mostra el número, el nom de la cookie i el valor original; si el valor conté codificació URL, es mostrarà el valor descodificat darrere d'una fletxa verda
  5. El cos de la targeta mostra els atributs detalladament per SameSite, Secure, HttpOnly, Path, Domain, Max-Age, Expires, Partitioned, etc.; Max-Age mostrarà automàticament entre parèntesis el temps llegible convertit
  6. La part inferior de la targeta mostra els resultats de la comprovació: les insígnies d'advertència taronjas indiquen problemes específics (cada problema té una explicació clara en català), les insígnies verdes indiquen que no s'han detectat problemes evidents
  7. Quan necessitis contrastar amb la configuració del servidor, fes clic a «Copia la capçalera original» per copiar totes les línies originals de Set-Cookie; quan necessitis processament programàtic, consulta la «Vista prèvia JSON»

Preguntes freqients

Per què la capçalera Set-Cookie s'ha configurat correctament però el navegador no ha desat la meva cookie?

Aquest és el problema més comú; el navegador no reportarà errors activament, sinó que descarta silenciosament les cookies que no compleixen les normes. Les causes habituals són: SameSite=None sense Secure, cookie Secure configurada en una pàgina HTTP (excepte localhost), incompliment de les restriccions dels prefixos __Host-/__Secure-, desajustament de Domain/Path, superació del límit de mida de 4KB, Max-Age igual a 0 o negatiu. Es recomana enganxar primer el Set-Cookie en aquesta eina, consultar les insígnies d'advertència per localitzar la causa específica, i després obrir Chrome DevTools → Application → Cookies per veure si hi ha un triangle d'advertència groc sota el domini corresponent; en passar-hi el cursor per sobre es veurà el motiu específic de rebuig.

Quina diferència hi ha realment entre Strict, Lax i None de SameSite? Quan s'ha d'utilitzar cadascun?

Strict no permet cap enviament entre tercers, és el més segur però els usuaris que entren des d'enllaços externs apareixeran com no autenticats, adequat per a cookies d'operacions sensibles com pagaments/canvi de contrasenya. Lax és el valor per defecte des de Chrome 80, permet portar la cookie en navegació GET de nivell superior (quan l'usuari fa clic en un enllaç extern per tornar al teu lloc), però no en subrecursos com iframe/img/script/XHR/formularis POST; és el valor recomanat per a la majoria d'escenaris. None permet l'enviament en tots els escenaris entre tercers (per a SSO d'inici de sessió únic, incrustació de tercers en iframe, cridades API entre tercers), però s'ha d'establir Secure obligatòriament, altrament el navegador la rebutjarà directament.

Per què SameSite=None ha d'anar acompanyat de Secure?

Aquesta és una regla que Chrome aplica obligatòriament des de la versió 80 (febrer de 2020), i Firefox, Edge i Safari també l'han adoptada. Com que SameSite=None permet explícitament l'enviament de cookies entre tercers, els atacants tenen més facilitat per dur a terme atacs CSRF o intercepcions en escenaris entre tercers, i cal acompanyar-lo de Secure (transmissió xifrada HTTPS) per reduir els riscos. Si la teva cookie SameSite=None es configura sota HTTP, el navegador la descartarà directament sense emmagatzemar-la. Aquesta eina detecta la combinació de SameSite=None sense Secure i la marca amb una advertència vermella.

Quin he d'utilitzar, Max-Age o Expires? Quina diferència hi ha?

Utilitza Max-Age prioritàriament. Max-Age és un temps relatiu (expira després de tants segons), no depèn del rellotge del client, i el navegador comença el compte enrere en rebre-la; Expires és un punt de temps absolut, depèn de l'hora local de l'ordinador de l'usuari (si l'usuari canvia el rellotge al 1970 la cookie caduca immediatament). Quan tots dos estan presents, Max-Age té prioritat més alta (especificat explícitament per RFC 6265). Si no s'estableix cap, la cookie es converteix en una «cookie de sessió» que caduca en tancar el navegador. Aquesta eina ofereix un avís per als casos en què s'ha establert Expires però no Max-Age, recomanant afegir Max-Age. Tingues en compte que la unitat de Max-Age és segons, no mil·lisegons.

Quina diferència hi ha entre establir Path=/ i no establir Path?

Path determina en quins camins URL el navegador inclourà aquesta cookie en les peticions. Quan no s'estableix Path, el navegador utilitza per defecte «el camí de l'URL de resposta sense l'últim segment»; per exemple, en configurar una cookie des de /api/user/login, el Path per defecte és /api/user/, de manera que les peticions sota / i /order/ no portaran aquesta cookie. Establir Path=/ explícitament fa que la cookie sigui efectiva per a tot el lloc. Tingues en compte que la concordança de Path és per prefix; Path=/api també concordarà amb /api/, /api/user, /api/v2/abc, etc. Les cookies amb prefix __Host- requereixen obligatòriament Path=/.

Quina diferència hi ha entre Domain que comença amb punt (com .example.com) i sense punt?

En navegadors moderns (versions recents de Chrome, Firefox, Edge, Safari), els dos són ja equivalents, i tots dos faran que la cookie sigui efectiva per a example.com i tots els seus subdominis (a.example.com, b.c.example.com). El punt inicial era l'escriptura antiga de l'època de RFC 2109, i RFC 6265 ja especifica explícitament ignorar el punt inicial. Tanmateix, per llegibilitat es recomana escriure la forma sense punt. Aquesta eina ofereix un avís per als casos en què Domain té un punt inicial (no és un error, però és una escriptura heretada històricament). Nota: si no s'estableix Domain, la cookie només és efectiva per a l'host actual (els subdominis no la portaran); en establir Domain ho serà per als subdominis.

Què són els prefixos __Host- i __Secure-? Es pot treballar sense escriure prefixos?

Aquests són prefixos de seguretat per a noms de cookie introduïts per RFC 6265bis, per afegir restriccions fortes a les cookies d'alta seguretat: quan el navegador veu que un nom de cookie comença per __Host-, obliga a establir simultàniament Secure, Path=/ i no establir Domain; si no es compleix qualsevol condició, rebutja directament emmagatzemar-la; el prefix __Secure- requereix establir Secure obligatòriament, i els altres atributs es poden configurar. Sense escriure prefixos també funciona (la majoria de cookies no utilitzen prefixos), però per a cookies d'alta seguretat com identificadors de sessió i tokens d'autorització es recomana fermament utilitzar el prefix __Host-, ja que pot prevenir atacs d'injecció de cookies a nivell de subdomini/camí. Aquesta eina detecta automàticament el compliment dels dos tipus de prefixos.

Les cookies HttpOnly són realment segures? Protegeixen contra XSS i CSRF?

HttpOnly impedeix que JavaScript llegeixi el valor de la cookie mitjançant document.cookie, i és una línia de defensa important per <strong>mitigar el robatori de sessió per XSS</strong>, però no és una solució universal: els atacants XSS encara poden enviar peticions des del navegador de l'usuari (les peticions porten la cookie automàticament) per dur a terme accions (això és l'àmbit de CSRF); HttpOnly tampoc pot defensar contra atacs CSRF (cal SameSite o CSRF Token). Només amb la combinació de la trilogia HttpOnly+Secure+SameSite=Lax/Strict s'aconsegueix un nivell bàsic de seguretat. Les cookies sensibles (session, JWT, access_token) han de ser HttpOnly, i no s'han de donar a llegir al JS del frontend si no és necessari. Aquesta eina marca amb una advertència les cookies que no tenen HttpOnly.

Què són les cookies Partitioned (CHIPS)? Quan cal utilitzar-les?

Partitioned és un nou atribut introduït per Chrome per fer front a l'eliminació de cookies de tercers, amb el nom complet Cookies Having Independent Partitioned State (CHIPS). Les cookies de tercers tradicionals (com les que configuren serveis de publicitat/incrustació en múltiples llocs) són compartides globalment i s'utilitzen per fer seguiment d'usuaris entre llocs. En afegir Partitioned, el navegador emmagatzemarà la cookie de tercer separadament per lloc de nivell superior: la cookie de tercer que l'usuari veu en el lloc A i la que veu en el lloc B són completament independents i no poden compartir identitat entre llocs. Casos d'ús: components de vídeo/mapes/pagaments incrustats, connectors de servei d'atenció al client de tercers, SSO entre llocs incrustats en iframe. L'ús de Partitioned requereix establir Secure obligatòriament i es recomana acompanyar-lo del prefix __Host-.

Quant pot emmagatzemar com a màxim una cookie? Quantes es poden posar per domini?

Segons RFC 6265, els navegadors admeten com a mínim 4096 bytes per cookie (incloent nom, valor i atributs), i els navegadors principals (Chrome/Firefox/Safari/Edge) apliquen aquest límit; la part que el superi serà truncada o descartada silenciosament. Els límits de nombre varien segons el navegador: Chrome uns 180 per domini, Firefox uns 150, Safari uns 600 (i sotmesos a la política de neteja de 7 dies d'ITP); en superar el límit, els navegadors eliminaran les cookies més antigues mitjançant l'estratègia LRU. Es recomana que les cookies només emmagatzemin identificadors de sessió, i no hi posis grans blocs de dades de negoci (les dades de negoci s'han de posar en localStorage o en sessions del costat servidor).

Admet copiar Set-Cookie directament des de Chrome DevTools per analitzar-lo? Cal eliminar el prefix manualment?

Totalment admès, no cal processar-ho manualment. Pots fer clic a la petició objectiu al panell Network de Chrome DevTools, fer clic dret al valor de Set-Cookie a la secció Response Headers i copiar-lo directament (en múltiples línies, fes clic múltiple amb Ctrl/⌘ o copia la secció sencera), i enganxar-lo a l'àrea d'entrada d'aquesta eina. L'eina eliminarà automàticament el prefix Set-Cookie: del començament de cada línia (sensible a majúscules i minúscules), processarà automàticament els espais en blanc al principi i al final de les línies, tractarà correctament caràcters especials comes, punts i comes, etc. que contenen les dates Expires, i també processarà correctament els valors de cookie entre cometes dobles.

Per què els caràcters xinesos o especials en el valor de la cookie es converteixen en forma %XX?

RFC 6265 requereix que els valors de cookie només utilitzin un subconjunt segur del joc de caràcters ASCII, i no poden contenir directament caràcters xinesos, espais, comes, punts i comes, etc. Molts frameworks del costat servidor codifiquen automàticament en URL (encodeURIComponent/Percent-encoding) els caràcters no ASCII en configurar cookies; per exemple, «你好» es codificarà com %E4%BD%A0%E5%A5%BD. El navegador també manté la forma codificada en retornar-la. Quan aquesta eina detecta que un valor conté codificació %XX, mostra automàticament el text original descodificat amb decodeURIComponent mitjançant una fletxa verda al costat del valor original, per facilitar-ne la consulta del contingut real.

Quina diferència hi ha entre la capçalera Set-Cookie i la capçalera Cookie?

Són capçaleres en direccions completament diferents: Set-Cookie és una capçalera de resposta (servidor → navegador), només apareix en les respostes, pot aparèixer diverses vegades, cada vegada configura una cookie i conté tots els atributs (Secure/HttpOnly/Path/Domain, etc.); Cookie és una capçalera de petició (navegador → servidor), només apareix una vegada per petició i conté una llista plana de parells nom=valor de totes les cookies que coincideixen amb l'àmbit actual (name1=v1; name2=v2), sense cap informació d'atributs. Això significa que el servidor no pot saber des de la petició si una cookie té HttpOnly o Secure; la informació d'atributs només la conserva el navegador quan l'emmagatzema localment. Per analitzar la capçalera Cookie de la petició, utilitza l'<a href='/network/http-cookie-parser/'>analitzador de capçaleres Cookie de petició</a> complementari.

Per què les meves cookies desapareixen al cap d'uns dies a Safari?

Això és degut al mecanisme de Prevenció de Seguiment Intel·ligent (ITP: Intelligent Tracking Prevention) de Safari. Des d'ITP 2.1, si l'usuari no ha interactuat directament amb aquest domini en 7 dies (és a dir, no ha visitat directament el lloc d'aquest domini), Safari netejarà totes les cookies i dades del lloc sota aquest domini, independentment de la durada que s'hagi establert per a Max-Age/Expires. Això afecta més els serveis incrustats de tercers, i no afecta les cookies del lloc principal mentre l'usuari hi accedeix contínuament. A més, Safari té restriccions més estrictes sobre les cookies de tercers que Chrome. Les solucions inclouen utilitzar l'atribut Partitioned, sol·licitar permisos mitjançant l'API Storage Access, o refrescar la cookie novament quan l'usuari visita el lloc principal. La secció de resolució de problemes d'aquesta eina inclou una guia de depuració més detallada per a Safari.

L'eina admet l'anàlisi massiva de múltiples Set-Cookie? Pujarà el contingut de les cookies al servidor?

Admet anàlisi massiva. L'àrea d'entrada admet enganxar qualsevol nombre de línies de Set-Cookie (per exemple enganxar una secció sencera de capçaleres de resposta d'una vegada), cada Set-Cookie s'analitzarà amb numeració independent, i múltiples targetes d'atributs mostraran els seus atributs i advertències respectius. Tot el procés d'anàlisi es realitza completament de forma local al teu navegador (processament JavaScript purament de frontend), el contingut de les cookies no es pujarà a cap servidor ni s'enviarà cap petició de xarxa; la informació sensible com Session/Token que enganxis no sortirà del teu ordinador, i ho pots utilitzar amb total tranquil·litat.

术语表

Set-Cookie
Capçalera de resposta HTTP mitjançant la qual el servidor indica al navegador que emmagatzemi una cookie; pot aparèixer diverses vegades en una resposta.
Cookie (capçalera de petició)
Capçalera de petició HTTP, una llista de parells nom-valor de cookies que compleixen els requisits d'àmbit que el navegador adjunta automàticament, sense atributs.
HttpOnly
Indicador d'atribut de cookie. Un cop establert, JavaScript no pot llegir la cookie mitjançant document.cookie, principalment per defensar contra robatori de sessió per XSS.
Secure
Indicador d'atribut de cookie. Un cop establert, el navegador només enviarà la cookie en connexions xifrades HTTPS (o localhost).
SameSite
Atribut de cookie que controla si s'enviarà la cookie en peticions de tercers, amb valors Strict/Lax/None. Per defecte és Lax des de Chrome 80.
Max-Age
Atribut de cookie que especifica els segons de vida de la cookie, amb prioritat sobre Expires, recomanat. =0 indica eliminació immediata.
Expires
Atribut de cookie que especifica el punt de temps concret d'expiració (HTTP-date), depèn del rellotge del client.
Path
Atribut de cookie que limita el prefix del camí URL on la cookie és efectiva; per defecte s'agafa la part de directori de l'URL de resposta.
Domain
Atribut de cookie que limita el domini on la cookie és efectiva. Si no s'estableix, només és efectiva per a l'host actual; si s'estableix, ho és per als subdominis.
Partitioned (CHIPS)
Indicador d'atribut de cookie que activa l'emmagatzematge particionat de cookies de tercers, és la solució alternativa després de l'eliminació de cookies de tercers per Chrome, s'ha d'acompanyar de Secure.
Prefix __Host-
Restricció de seguretat per prefix de nom de cookie. Requereix obligatòriament Secure, Path=/ i sense Domain; en cas contrari el navegador rebutja emmagatzemar-la.
Prefix __Secure-
Restricció de seguretat per prefix de nom de cookie. Requereix establir Secure obligatòriament; en cas contrari el navegador rebutja emmagatzemar-la.
Cookie de sessió (Session Cookie)
Cookie sense Max-Age ni Expires, que s'elimina automàticament quan es tanca el navegador.
Cookie de tercers (Third-party Cookie)
Cookie configurada sota un domini diferent del domini de la pàgina que s'està visitant actualment, normalment configurada per serveis de tercers com publicitat, seguiment, incrustació en iframe, que els navegadors estan limitant progressivament.

Taula ràpida de comparació de les tres estratègies SameSite

Taula completa de referència d'atributs Set-Cookie (RFC 6265bis)

Límits habituals de mida i nombre de Set-Cookie per navegador

Troubleshooting