If you have FPI enabled; it will override the StoragePrincipal switch
and always return the partitioned jar; correct?

Also, I don't think this is a big problem; but users who have enabled
FPI in the past and then disabled it will have pre-populated
sub-cookie jars for the trackers. This will link a prior 'identity' to
the current one.

-tom

On Mon, Apr 15, 2019 at 3:23 PM Andrea Marchesini
<amarches...@mozilla.com> wrote:
>
> Since Firefox 66, the anti-tracking project has been working on strategies
> to protect users against trackers. One of the solutions is the ‘cookie
> blocking for 3rd party trackers’. This is currently done denying 3rd party
> trackers access to their cookie jar (no cookies sent/received, no
> localStorage, IndexedDB, BroadcastChannel, etc).
>
> As experience has shown blocking is not always the best path forward
> because blocking of legitimate requests breaks current web architecture.
> Hence, instead of blocking, we would like our tracking algorithm to be
> smarter and hence we would like to partition the cookie jar.
>
> To that end bug 1536411 decouples the nsIPrincipal to be used for the
> cookie jar and the nsIPrincipal to be used for anything else (networking,
> window and workers communications, and so on).
>
> The nsIPrincipal for the cookie jar is now called ‘StoragePrincipal’ and it
> can be obtained from the Document, from the WorkerPrivate, or from the
> nsIScriptObjectPrincipal and it can be created from an nsIChannel by
> nsIScriptSecurityManager::getChannelResultStoragePrincipal().
>
> Normally, these getters return the regular nsIPrincipal of the resource. If
> the  nsIChannel is classified by the URL-Classifier as a 3rd party tracking
> resource then its StoragePrincipal will be a modified nsIPrincipal - which
> is the ‘regular’ nsIPrincipal plus “First Party Isolation” (FPI) - See
> below the differences between FPI and StoragePrincipal. More technical, its
> OriginAttributes.firstPartyDomain attribute within the nsIPrincipal will be
> set to the top-level domain. When a document is loaded, it takes the
> StoragePrincipal by its nsIChannel and it propagates it to any storage API,
> worker, and so on. Because of this, tracking resources will use a
> partitioned cookie jar, unique for their origins, in that first-party
> domain.
>
> Also SharedWorkers and BroadcastChannels use the StoragePrincipal to
> generate their ‘sharing’ keys in order to avoid the communication between
> partitioned and non-partitioned contexts.
>
> Everyone interested in reading code comments, I refer the reader to:
>
> https://searchfox.org/mozilla-central/rev/0376cbf447efa16922c550da3bfd783b916e35d3/toolkit/components/antitracking/StoragePrincipalHelper.h#10
>
> When storage access permission is granted (see StorageAccess API [1] or the
> anti-tracking heuristic [2]), the StoragePrincipal getters will start
> returning the ‘regular’ nsIPrincipal and any storage components exposed to
> content, will be reset/recreated: they will behave like the first-party
> resource’s one. This behavior is observable to content because, for
> instance, the localStorage data before and after the permission will be
> different. But, also the current approach [3] is observable to content:
> localStorage throws exceptions before, and it works after.
>
> The new storage partitioning mechanism is controlled by the pref:
> privacy.storagePrincipal.enabledForTrackers, which is to false by default.
>
> Difference between FPI and StoragePrincipal:
>
> a. With storagePrincipal we have partitioned cookie jars just for tracking
> resources. FPI has partitioned cookie jars everywhere, double-keying any
> origin.
>
> b. StoragePrincipal doesn’t break window-to-window communications because
> the partitioning the partitioning happens at a cookie jar level and it’s
> not spread to the ‘regular’ nsIPrincipal.
>
> c. We can ‘revert’ this partitioning when needed (StorageAccess API).
>
> [1] https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API
>
> [2]
> https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy#Storage_access_grants
>
> [3]
> https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy#What_does_the_storage_access_policy_block
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to