The "private browsing" mode of different browser can differ WRT a few details, but they share the same goal: to disconnect "private" and "normal" browsing as much as possible. (I believe "private mode" follow the same philosophy in most browsers.)
High level description of what private browsing mode tries to emulate:
- install a clean, fresh browser (in a RAM disk)
- import (share) most of your settings; which ones? probably not the per-site settings
- import some of your browsers extensions; which ones? (can be customised in Google Chrome)
- import your browsers plug-ins
- the bookmarks are shared with your normal browser; see note about URL below about the risks of URL
You get the idea. There is no real installation of course, it's a very abstract description.
Transient browser state must not be imported, notably:
- HTTP cookies, HTML off-line storage, etc.
- cache (see also: How can I prevent tracking by ETAGs?)
- URL history (see
:visited CSS property)
- TLS active connexions
- HTTP authentication (basic, challenge...)
Browser extensions: good or bad for privacy?
It is difficult to balance the advantages regarding security and privacy of browser extensions and the fact that they might contribute to specific browser fingerprints, as they can make the browser less "standard looking": even if you hide your extensions in
user-agent, they change the browser behaviour in ways that are often detectable, making the browser fingerprinting more precise.
For example, running AdBlock/ABP the browser will not download ads (well, anything) from particular locations (domains, directories), depending on the subscribed filter list. A particular filter list could be identified, and this information could be used for browser fingerprinting.
In general the most useful extensions for security and privacy will change the behaviour of the browser:
- block "Referer" information
- block tracking/statistic/"analytic" tools
- block/limit third party cookies
- block/limit JS
A note about "customised" URL
Be careful that a particular URL may carry identifying information, such as
Email links often carry such identifying informations to determine if a particular email has been read.
It is not clear what can be done about that in general at the browser level, as URL is usually entirely relevant (there is nothing in most URL that can be striped, such that the striped still refers to the same resource), but some URL carry informations that identify not the resource but the way to was obtained (such as "referer" information).
I guess some query parameters names could be as white-listed (like
q=xxx for searches), others black-listed, and the user could have to make some guesses about others.
Of course if such filters were widely used, a counter approach could be easily deployed: the exact same identifying information could be passed not in query parameters, but disguised as a regular URL information:
/sessionid_is_xxx/ and would be even harder to filter.
An alternate approach would be to search for the URL in Google (assuming the resource is on the public indexed Web); the complete URL is not found, to remove informations from the URL until a document with (about) the same URL is found on the public Web. Then the simplified URL can be used as a non-identifying URL (if any "path" or "Referer" is embedded in the URL, it identifies the Google Bot).
But I think I am drifting away from the original question...