Innanzitutto, una definizione di Chrome :
Same-site cookies (née "First-Party-Only" (née "First-Party")) allow servers to mitigate the risk of CSRF and information leakage attacks by asserting that a particular cookie should only be sent with requests initiated from the same registrable domain.
Quindi cosa protegge da questo?
CSRF?
I cookie con lo stesso sito possono prevenire efficacemente gli attacchi CSRF. Perché?
Se imposti il cookie di sessione come stesso sito, verrà inviato solo se una richiesta viene emessa dal tuo sito. Quindi un attacco CSRF standard in cui l'aggressore attira la vittima sul sito http://malicious.com
che registra una richiesta su http://bank.com/transfer.php?amount=10000&receiver=evil_hacker
non funzionerà. Poiché malicious.com
non è la stessa origine di bank.com
, il browser non invierà il cookie di sessione e transfer.php
verrà eseguito come se la vittima non avesse effettuato l'accesso.
Questo è molto simile a come l'impostazione di un'intestazione HTTP X-Csrf-Token
ti protegge da CSRF - di nuovo c'è qualcosa che viene inviato solo se la richiesta viene emessa dal tuo dominio. La proprietà dello stesso sito trasforma il tuo cookie di sessione in un token CSRF.
Quindi il problema è stato risolto? Beh, un po '. Ci sono alcuni avvertimenti:
- Funzionerà solo per i browser che implementano questa funzione. Finora, pochissimi lo fanno. A meno che non si desideri lanciare chiunque utilizzi un browser leggermente più vecchio sotto il bus, sarà comunque necessario implementare un token CSRF vecchio stile.
- Se hai bisogno di un controllo più dettagliato, questo non sarà sufficiente. Se si esegue un sistema che visualizza contenuti utente non attendibili, come un forum, non si desidera che le richieste provenienti dai post degli utenti siano considerate valide. Se qualcuno pubblica un link a
http://myforum.com/?action=delete_everything
, non vuoi che questo elimini qualcosa solo perché un utente fa clic su di esso. Con un token CSRF tradizionale, puoi controllare esattamente quando viene utilizzato. Con un cookie per lo stesso sito, non puoi.
- Restano validi gli stessi vecchi avvertimenti relativi alle protezioni CSRF vecchio stile. Se hai una vulnerabilità XSS, nessuna protezione CSRF in questo mondo ti proteggerà.
Detto ciò, lo stesso cookie del sito è ancora una buona cosa che dovrebbe essere usato insieme alle difese tradizionali come difesa in profondità.
XSS e XSSI?
Il cookie dello stesso sito non fa nulla per proteggerti dagli attacchi XSS ordinari. Se un hacker riesce a ingannare il tuo sito per echeggiare lo script dall'URL sul tuo sito, verrà eseguito come proveniente dalla tua origine (dopotutto lo è), e quindi i cookie di sessione saranno comunque inviati con tutte le richieste dello script immesso rende al tuo dominio.
Se leggi attentamente la citazione nel tuo post, vedrai che dice XSSI con un I alla fine, e non con XSS. L'I rappresenta l'inclusione e XSSI è correlato a, ma diverso da, XSS. Qui è una buona spiegazione di XSSI e come differisce da XSS:
XSSI is a form of XSS that takes advantage of the fact that browsers don't prevent webpages from including resources like images and scripts, which are hosted on other domains and servers. [...] For example, if Bank ABC's site has a script that reads a user's private account information, a hacker could include that script in their own malicious site (www.fraudulentbank.com) to pull information from Bank ABC's servers whenever a client of Bank ABC visits the hacker's site.
I cookie con lo stesso sito ti proteggono da XSSI, poiché un cookie di sessione non verrebbe inviato con la richiesta dello script e non restituirebbe quindi alcuna informazione sensibile. Tuttavia, per XSS ordinario non fa differenza.