1b97e4b0e6ad500651709b419d0fd3aa0245206d
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en    1) <?xml version="1.0" encoding="UTF-8"?>
torbutton/en/design/index.html.en    2) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en    3) <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Torbutton Design Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article" title="Torbutton Design Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>Torbutton Design Documentation</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:mikeperry.fscked/org">mikeperry.fscked/org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">Apr 10 2011</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2666923">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary">1.1. Adversary Model</a></span></dt><dt><span class="sect2"><a href="#requirements">1.2. Torbutton Requirements</a></span></dt><dt><span class="sect2"><a href="#layout">1.3. Extension Layout</a></span></dt></dl></dd><dt><span class="sect1"><a href="#components">2. Components</a></span></dt><dd><dl><dt><span class="sect2"><a href="#hookedxpcom">2.1. Hooked Components</a></span></dt><dt><span class="sect2"><a href="#id2690319">2.2. New Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2681735">3. Chrome</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2702019">3.1. XUL Windows and Overlays</a></span></dt><dt><span class="sect2"><a href="#id2694797">3.2. Major Chrome Observers</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2696524">4. Toggle Code Path</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2699452">4.1. Button Click</a></span></dt><dt><span class="sect2"><a href="#id2697978">4.2. Proxy Update</a></span></dt><dt><span class="sect2"><a href="#id2697015">4.3. Settings Update</a></span></dt><dt><span class="sect2"><a href="#preferences">4.4. Firefox preferences touched during Toggle</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2702702">5. Description of Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2704948">5.1. Proxy Settings</a></span></dt><dt><span class="sect2"><a href="#id2686645">5.2. Dynamic Content Settings</a></span></dt><dt><span class="sect2"><a href="#id2705261">5.3. History and Forms Settings</a></span></dt><dt><span class="sect2"><a href="#id2705577">5.4. Cache Settings</a></span></dt><dt><span class="sect2"><a href="#id2705686">5.5. Cookie and Auth Settings</a></span></dt><dt><span class="sect2"><a href="#id2705999">5.6. Startup Settings</a></span></dt><dt><span class="sect2"><a href="#id2706113">5.7. Shutdown Settings</a></span></dt><dt><span class="sect2"><a href="#id2706173">5.8. Header Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="#FirefoxBugs">6. Relevant Firefox Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="#TorBrowserBugs">6.1. Tor Browser Bugs</a></span></dt><dt><span class="sect2"><a href="#ToggleModelBugs">6.2. Toggle Model Bugs</a></span></dt></dl></dd><dt><span class="sect1"><a href="#TestPlan">7. Testing</a></span></dt><dd><dl><dt><span class="sect2"><a href="#SingleStateTesting">7.1. Single state testing</a></span></dt><dt><span class="sect2"><a href="#id2707624">7.2. Multi-state testing</a></span></dt><dt><span class="sect2"><a href="#HackTorbutton">7.3. Active testing (aka How to Hack Torbutton)</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2666923"></a>1. Introduction</h2></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en    4) 
torbutton/en/design/index.html.en    5) This document describes the goals, operation, and testing procedures of the
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en    6) Torbutton Firefox extension. It is current as of Torbutton 1.3.2.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en    7) 
torbutton/en/design/index.html.en    8)   </p><div class="sect2" title="1.1. Adversary Model"><div class="titlepage"><div><div><h3 class="title"><a id="adversary"></a>1.1. Adversary Model</h3></div></div></div><p>
torbutton/en/design/index.html.en    9) 
torbutton/en/design/index.html.en   10) A Tor web browser adversary has a number of goals, capabilities, and attack
torbutton/en/design/index.html.en   11) types that can be used to guide us towards a set of requirements for the
torbutton/en/design/index.html.en   12) Torbutton extension. Let's start with the goals.
torbutton/en/design/index.html.en   13) 
torbutton/en/design/index.html.en   14)    </p><div class="sect3" title="Adversary Goals"><div class="titlepage"><div><div><h4 class="title"><a id="adversarygoals"></a>Adversary Goals</h4></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Bypassing proxy settings</strong></span><p>The adversary's primary goal is direct compromise and bypass of 
torbutton/en/design/index.html.en   15) Tor, causing the user to directly connect to an IP of the adversary's
torbutton/en/design/index.html.en   16) choosing.</p></li><li class="listitem"><span class="command"><strong>Correlation of Tor vs Non-Tor Activity</strong></span><p>If direct proxy bypass is not possible, the adversary will likely
torbutton/en/design/index.html.en   17) happily settle for the ability to correlate something a user did via Tor with
torbutton/en/design/index.html.en   18) their non-Tor activity. This can be done with cookies, cache identifiers,
torbutton/en/design/index.html.en   19) javascript events, and even CSS. Sometimes the fact that a user uses Tor may
torbutton/en/design/index.html.en   20) be enough for some authorities.</p></li><li class="listitem"><span class="command"><strong>History disclosure</strong></span><p>
torbutton/en/design/index.html.en   21) The adversary may also be interested in history disclosure: the ability to
torbutton/en/design/index.html.en   22) query a user's history to see if they have issued certain censored search
torbutton/en/design/index.html.en   23) queries, or visited censored sites.
torbutton/en/design/index.html.en   24)      </p></li><li class="listitem"><span class="command"><strong>Location information</strong></span><p>
torbutton/en/design/index.html.en   25) 
torbutton/en/design/index.html.en   26) Location information such as timezone and locality can be useful for the
torbutton/en/design/index.html.en   27) adversary to determine if a user is in fact originating from one of the
torbutton/en/design/index.html.en   28) regions they are attempting to control, or to zero-in on the geographical
torbutton/en/design/index.html.en   29) location of a particular dissident or whistleblower.
torbutton/en/design/index.html.en   30) 
torbutton/en/design/index.html.en   31)      </p></li><li class="listitem"><span class="command"><strong>Miscellaneous anonymity set reduction</strong></span><p>
torbutton/en/design/index.html.en   32) 
torbutton/en/design/index.html.en   33) Anonymity set reduction is also useful in attempting to zero in on a
torbutton/en/design/index.html.en   34) particular individual. If the dissident or whistleblower is using a rare build
torbutton/en/design/index.html.en   35) of Firefox for an obscure operating system, this can be very useful
torbutton/en/design/index.html.en   36) information for tracking them down, or at least <a class="link" href="#fingerprinting">tracking their activities</a>.
torbutton/en/design/index.html.en   37) 
torbutton/en/design/index.html.en   38)      </p></li><li class="listitem"><span class="command"><strong>History records and other on-disk
torbutton/en/design/index.html.en   39) information</strong></span><p>
torbutton/en/design/index.html.en   40) In some cases, the adversary may opt for a heavy-handed approach, such as
torbutton/en/design/index.html.en   41) seizing the computers of all Tor users in an area (especially after narrowing
torbutton/en/design/index.html.en   42) the field by the above two pieces of information). History records and cache
torbutton/en/design/index.html.en   43) data are the primary goals here.
torbutton/en/design/index.html.en   44)      </p></li></ol></div></div><div class="sect3" title="Adversary Capabilities - Positioning"><div class="titlepage"><div><div><h4 class="title"><a id="adversarypositioning"></a>Adversary Capabilities - Positioning</h4></div></div></div><p>
torbutton/en/design/index.html.en   45) The adversary can position themselves at a number of different locations in
torbutton/en/design/index.html.en   46) order to execute their attacks.
torbutton/en/design/index.html.en   47)     </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Exit Node or Upstream Router</strong></span><p>
torbutton/en/design/index.html.en   48) The adversary can run exit nodes, or alternatively, they may control routers
torbutton/en/design/index.html.en   49) upstream of exit nodes. Both of these scenarios have been observed in the
torbutton/en/design/index.html.en   50) wild.
torbutton/en/design/index.html.en   51)      </p></li><li class="listitem"><span class="command"><strong>Adservers and/or Malicious Websites</strong></span><p>
torbutton/en/design/index.html.en   52) The adversary can also run websites, or more likely, they can contract out
torbutton/en/design/index.html.en   53) ad space from a number of different adservers and inject content that way. For
torbutton/en/design/index.html.en   54) some users, the adversary may be the adservers themselves. It is not
torbutton/en/design/index.html.en   55) inconceivable that adservers may try to subvert or reduce a user's anonymity 
torbutton/en/design/index.html.en   56) through Tor for marketing purposes.
torbutton/en/design/index.html.en   57)      </p></li><li class="listitem"><span class="command"><strong>Local Network/ISP/Upstream Router</strong></span><p>
torbutton/en/design/index.html.en   58) The adversary can also inject malicious content at the user's upstream router
torbutton/en/design/index.html.en   59) when they have Tor disabled, in an attempt to correlate their Tor and Non-Tor
torbutton/en/design/index.html.en   60) activity.
torbutton/en/design/index.html.en   61)      </p></li><li class="listitem"><span class="command"><strong>Physical Access</strong></span><p>
torbutton/en/design/index.html.en   62) Some users face adversaries with intermittent or constant physical access.
torbutton/en/design/index.html.en   63) Users in Internet cafes, for example, face such a threat. In addition, in
torbutton/en/design/index.html.en   64) countries where simply using tools like Tor is illegal, users may face
torbutton/en/design/index.html.en   65) confiscation of their computer equipment for excessive Tor usage or just
torbutton/en/design/index.html.en   66) general suspicion.
torbutton/en/design/index.html.en   67)      </p></li></ol></div></div><div class="sect3" title="Adversary Capabilities - Attacks"><div class="titlepage"><div><div><h4 class="title"><a id="attacks"></a>Adversary Capabilities - Attacks</h4></div></div></div><p>
torbutton/en/design/index.html.en   68) 
torbutton/en/design/index.html.en   69) The adversary can perform the following attacks from a number of different 
torbutton/en/design/index.html.en   70) positions to accomplish various aspects of their goals. It should be noted
torbutton/en/design/index.html.en   71) that many of these attacks (especially those involving IP address leakage) are
torbutton/en/design/index.html.en   72) often performed by accident by websites that simply have Javascript, dynamic 
torbutton/en/design/index.html.en   73) CSS elements, and plugins. Others are performed by adservers seeking to
torbutton/en/design/index.html.en   74) correlate users' activity across different IP addresses, and still others are
torbutton/en/design/index.html.en   75) performed by malicious agents on the Tor network and at national firewalls.
torbutton/en/design/index.html.en   76) 
torbutton/en/design/index.html.en   77)     </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Inserting Javascript</strong></span><p>
torbutton/en/design/index.html.en   78) If not properly disabled, Javascript event handlers and timers
torbutton/en/design/index.html.en   79) can cause the browser to perform network activity after Tor has been disabled,
torbutton/en/design/index.html.en   80) thus allowing the adversary to correlate Tor and Non-Tor activity and reveal
torbutton/en/design/index.html.en   81) a user's non-Tor IP address. Javascript
torbutton/en/design/index.html.en   82) also allows the adversary to execute <a class="ulink" href="http://whattheinternetknowsaboutyou.com/" target="_top">history disclosure attacks</a>:
torbutton/en/design/index.html.en   83) to query the history via the different attributes of 'visited' links to search
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en   84) for particular Google queries, sites, or even to <a class="ulink" href="http://www.mikeonads.com/2008/07/13/using-your-browser-url-history-estimate-gender/" target="_top">profile
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en   85) users based on gender and other classifications</a>. Finally,
torbutton/en/design/index.html.en   86) Javascript can be used to query the user's timezone via the
torbutton/en/design/index.html.en   87) <code class="function">Date()</code> object, and to reduce the anonymity set by querying
torbutton/en/design/index.html.en   88) the <code class="function">navigator</code> object for operating system, CPU, locale, 
torbutton/en/design/index.html.en   89) and user agent information.
torbutton/en/design/index.html.en   90)      </p></li><li class="listitem"><span class="command"><strong>Inserting Plugins</strong></span><p>
torbutton/en/design/index.html.en   91) 
torbutton/en/design/index.html.en   92) Plugins are abysmal at obeying the proxy settings of the browser. Every plugin
torbutton/en/design/index.html.en   93) capable of performing network activity that the author has
torbutton/en/design/index.html.en   94) investigated is also capable of performing network activity independent of
torbutton/en/design/index.html.en   95) browser proxy settings - and often independent of its own proxy settings.
torbutton/en/design/index.html.en   96) Sites that have plugin content don't even have to be malicious to obtain a
torbutton/en/design/index.html.en   97) user's
torbutton/en/design/index.html.en   98) Non-Tor IP (it usually leaks by itself), though <a class="ulink" href="http://decloak.net" target="_top">plenty of active
torbutton/en/design/index.html.en   99) exploits</a> are possible as well. In addition, plugins can be used to store unique identifiers that are more
torbutton/en/design/index.html.en  100) difficult to clear than standard cookies. 
torbutton/en/design/index.html.en  101) <a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based
torbutton/en/design/index.html.en  102) cookies</a> fall into this category, but there are likely numerous other
torbutton/en/design/index.html.en  103) examples.
torbutton/en/design/index.html.en  104) 
torbutton/en/design/index.html.en  105)      </p></li><li class="listitem"><span class="command"><strong>Inserting CSS</strong></span><p>
torbutton/en/design/index.html.en  106) 
torbutton/en/design/index.html.en  107) CSS can also be used to correlate Tor and Non-Tor activity and reveal a user's
torbutton/en/design/index.html.en  108) Non-Tor IP address, via the usage of
torbutton/en/design/index.html.en  109) <a class="ulink" href="http://www.tjkdesign.com/articles/css%20pop%20ups/" target="_top">CSS
torbutton/en/design/index.html.en  110) popups</a> - essentially CSS-based event handlers that fetch content via
torbutton/en/design/index.html.en  111) CSS's onmouseover attribute. If these popups are allowed to perform network
torbutton/en/design/index.html.en  112) activity in a different Tor state than they were loaded in, they can easily
torbutton/en/design/index.html.en  113) correlate Tor and Non-Tor activity and reveal a user's IP address. In
torbutton/en/design/index.html.en  114) addition, CSS can also be used without Javascript to perform <a class="ulink" href="http://ha.ckers.org/weird/CSS-history.cgi" target="_top">CSS-only history disclosure
torbutton/en/design/index.html.en  115) attacks</a>.
torbutton/en/design/index.html.en  116)      </p></li><li class="listitem"><span class="command"><strong>Read and insert cookies</strong></span><p>
torbutton/en/design/index.html.en  117) 
torbutton/en/design/index.html.en  118) An adversary in a position to perform MITM content alteration can inject
torbutton/en/design/index.html.en  119) document content elements to both read and inject cookies for
torbutton/en/design/index.html.en  120) arbitrary domains. In fact, many "SSL secured" websites are vulnerable to this
torbutton/en/design/index.html.en  121) sort of <a class="ulink" href="http://seclists.org/bugtraq/2007/Aug/0070.html" target="_top">active
torbutton/en/design/index.html.en  122) sidejacking</a>.
torbutton/en/design/index.html.en  123) 
torbutton/en/design/index.html.en  124)      </p></li><li class="listitem"><span class="command"><strong>Create arbitrary cached content</strong></span><p>
torbutton/en/design/index.html.en  125) 
torbutton/en/design/index.html.en  126) Likewise, the browser cache can also be used to <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">store unique
torbutton/en/design/index.html.en  127) identifiers</a>. Since by default the cache has no same-origin policy,
torbutton/en/design/index.html.en  128) these identifiers can be read by any domain, making them an ideal target for
torbutton/en/design/index.html.en  129) adserver-class adversaries.
torbutton/en/design/index.html.en  130) 
torbutton/en/design/index.html.en  131)      </p></li><li class="listitem"><a id="fingerprinting"></a><span class="command"><strong>Fingerprint users based on browser
torbutton/en/design/index.html.en  132) attributes</strong></span><p>
torbutton/en/design/index.html.en  133) 
torbutton/en/design/index.html.en  134) There is an absurd amount of information available to websites via attributes
torbutton/en/design/index.html.en  135) of the browser. This information can be used to reduce anonymity set, or even
torbutton/en/design/index.html.en  136) <a class="ulink" href="http://mandark.fr/0x000000/articles/Total_Recall_On_Firefox..html" target="_top">uniquely
torbutton/en/design/index.html.en  137) fingerprint individual users</a>. </p><p>
torbutton/en/design/index.html.en  138) For illustration, let's perform a
torbutton/en/design/index.html.en  139) back-of-the-envelope calculation on the number of anonymity sets for just the
torbutton/en/design/index.html.en  140) resolution information available in the <a class="ulink" href="http://developer.mozilla.org/en/docs/DOM:window" target="_top">window</a> and
torbutton/en/design/index.html.en  141) <a class="ulink" href="http://developer.mozilla.org/en/docs/DOM:window.screen" target="_top">window.screen</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  142) objects.
torbutton/en/design/index.html.en  143) 
torbutton/en/design/index.html.en  144) 
torbutton/en/design/index.html.en  145) 
torbutton/en/design/index.html.en  146) Browser window resolution information provides something like
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  147) (1280-640)*(1024-480)=348160 different anonymity sets. Desktop resolution
torbutton/en/design/index.html.en  148) information contributes about another factor of 5 (for about 5 resolutions in
torbutton/en/design/index.html.en  149) typical use). In addition, the dimensions and position of the desktop taskbar
torbutton/en/design/index.html.en  150) are available, which can reveal hints on OS information. This boosts the count
torbutton/en/design/index.html.en  151) by a factor of 5 (for each of the major desktop taskbars - Windows, OSX, KDE
torbutton/en/design/index.html.en  152) and Gnome, and None). Subtracting the browser content window
torbutton/en/design/index.html.en  153) size from the browser outer window size provide yet more information.
torbutton/en/design/index.html.en  154) Firefox toolbar presence gives about a factor of 8 (3 toolbars on/off give
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  155) 2<sup>3</sup>=8). Interface effects such as title bar font size
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  156) and window manager settings gives a factor of about 9 (say 3 common font sizes
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  157) for the title bar and 3 common sizes for browser GUI element fonts).
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  158) Multiply this all out, and you have (1280-640)*(1024-480)*5*5*8*9 ~=
torbutton/en/design/index.html.en  159) 2<sup>29</sup>, or a 29 bit identifier based on resolution
torbutton/en/design/index.html.en  160) information alone. </p><p>
torbutton/en/design/index.html.en  161) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  162) Of course, this space is non-uniform in user density and prone to incremental
torbutton/en/design/index.html.en  163) changes. The <a class="ulink" href="https://wiki.mozilla.org/Fingerprinting#Data" target="_top">Panopticlick study
torbutton/en/design/index.html.en  164) done</a> by the EFF attempts to measure the actual entropy - the number of
torbutton/en/design/index.html.en  165) identifying bits of information encoded in browser properties.  Their result
torbutton/en/design/index.html.en  166) data is definitely useful, and the metric is probably the appropriate one for
torbutton/en/design/index.html.en  167) determining how identifying a particular browser property is. However, some
torbutton/en/design/index.html.en  168) quirks of their study means that they do not extract as much information as
torbutton/en/design/index.html.en  169) they could from display information: they only use desktop resolution (which
torbutton/en/design/index.html.en  170) Torbutton reports as the window resolution) and do not attempt to infer the
torbutton/en/design/index.html.en  171) size of toolbars.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  172) 
torbutton/en/design/index.html.en  173) </p></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or
torbutton/en/design/index.html.en  174) OS</strong></span><p>
torbutton/en/design/index.html.en  175) Last, but definitely not least, the adversary can exploit either general 
torbutton/en/design/index.html.en  176) browser vulnerabilities, plugin vulnerabilities, or OS vulnerabilities to
torbutton/en/design/index.html.en  177) install malware and surveillance software. An adversary with physical access
torbutton/en/design/index.html.en  178) can perform similar actions. Regrettably, this last attack capability is
torbutton/en/design/index.html.en  179) outside of Torbutton's ability to defend against, but it is worth mentioning
torbutton/en/design/index.html.en  180) for completeness.
torbutton/en/design/index.html.en  181)      </p></li></ol></div></div></div><div class="sect2" title="1.2. Torbutton Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="requirements"></a>1.2. Torbutton Requirements</h3></div></div></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
torbutton/en/design/index.html.en  182) 
torbutton/en/design/index.html.en  183) Since many settings satisfy multiple requirements, this design document is
torbutton/en/design/index.html.en  184) organized primarily by Torbutton components and settings. However, if you are
torbutton/en/design/index.html.en  185) the type that would rather read the document from the requirements
torbutton/en/design/index.html.en  186) perspective, it is in fact possible to search for each of the following
torbutton/en/design/index.html.en  187) requirement phrases in the text to find the relevant features that help meet
torbutton/en/design/index.html.en  188) that requirement.
torbutton/en/design/index.html.en  189) 
torbutton/en/design/index.html.en  190) </div><p>
torbutton/en/design/index.html.en  191) 
torbutton/en/design/index.html.en  192) From the above Adversary Model, a number of requirements become clear. 
torbutton/en/design/index.html.en  193) 
torbutton/en/design/index.html.en  194)    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="proxy"></a><span class="command"><strong>Proxy Obedience</strong></span><p>The browser
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  195) MUST NOT bypass Tor proxy settings for any content.</p></li><li class="listitem"><a id="state"></a><span class="command"><strong>State Separation</strong></span><p>Browser state (cookies, cache, history, 'DOM storage'), accumulated in
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  196)  one Tor state MUST NOT be accessible via the network in
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  197)  another Tor state.</p></li><li class="listitem"><a id="isolation"></a><span class="command"><strong>Network Isolation</strong></span><p>Pages MUST NOT perform any network activity in a Tor state different
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  198)  from the state they were originally loaded in.</p><p>Note that this requirement is
torbutton/en/design/index.html.en  199) being de-emphasized due to the coming shift to supporting only the Tor Browser
torbutton/en/design/index.html.en  200) Bundles, which do not support a Toggle operation.</p></li><li class="listitem"><a id="undiscoverability"></a><span class="command"><strong>Tor Undiscoverability</strong></span><p>With
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  201) the advent of bridge support in Tor 0.2.0.x, there are now a class of Tor
torbutton/en/design/index.html.en  202) users whose network fingerprint does not obviously betray the fact that they
torbutton/en/design/index.html.en  203) are using Tor. This should extend to the browser as well - Torbutton MUST NOT 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  204) reveal its presence while Tor is disabled.
torbutton/en/design/index.html.en  205) </p><p>Note that this requirement is
torbutton/en/design/index.html.en  206) being de-emphasized due to the coming shift to supporting only the Tor Browser
torbutton/en/design/index.html.en  207) Bundles, which do not support a Toggle operation.</p></li><li class="listitem"><a id="disk"></a><span class="command"><strong>Disk Avoidance</strong></span><p>The browser SHOULD NOT write any Tor-related state to disk, or store it
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  208)  in memory beyond the duration of one Tor toggle.</p></li><li class="listitem"><a id="location"></a><span class="command"><strong>Location Neutrality</strong></span><p>The browser SHOULD NOT leak location-specific information, such as
torbutton/en/design/index.html.en  209)  timezone or locale via Tor.</p></li><li class="listitem"><a id="setpreservation"></a><span class="command"><strong>Anonymity Set
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  210) Preservation</strong></span><p>The browser SHOULD NOT leak any other anonymity
torbutton/en/design/index.html.en  211) set reducing or fingerprinting information
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  212)  (such as user agent, extension presence, and resolution information)
torbutton/en/design/index.html.en  213) automatically via Tor. The assessment of the attacks above should make it clear
torbutton/en/design/index.html.en  214) that anonymity set reduction is a very powerful method of tracking and
torbutton/en/design/index.html.en  215) eventually identifying anonymous users.
torbutton/en/design/index.html.en  216) </p></li><li class="listitem"><a id="updates"></a><span class="command"><strong>Update Safety</strong></span><p>The browser
torbutton/en/design/index.html.en  217) SHOULD NOT perform unauthenticated updates or upgrades via Tor.</p></li><li class="listitem"><a id="interoperate"></a><span class="command"><strong>Interoperability</strong></span><p>Torbutton SHOULD interoperate with third-party proxy switchers that
torbutton/en/design/index.html.en  218)  enable the user to switch between a number of different proxies. It MUST
torbutton/en/design/index.html.en  219)  provide full Tor protection in the event a third-party proxy switcher has
torbutton/en/design/index.html.en  220)  enabled the Tor proxy settings.</p></li></ol></div></div><div class="sect2" title="1.3. Extension Layout"><div class="titlepage"><div><div><h3 class="title"><a id="layout"></a>1.3. Extension Layout</h3></div></div></div><p>Firefox extensions consist of two main categories of code: 'Components' and
torbutton/en/design/index.html.en  221) 'Chrome'. Components are a fancy name for classes that implement a given
torbutton/en/design/index.html.en  222) interface or interfaces. In Firefox, components <a class="ulink" href="https://developer.mozilla.org/en/XPCOM" target="_top">can be
torbutton/en/design/index.html.en  223) written</a> in C++,
torbutton/en/design/index.html.en  224) Javascript, or a mixture of both. Components have two identifiers: their
torbutton/en/design/index.html.en  225) '<a class="ulink" href="http://www.mozilla.org/projects/xpcom/book/cxc/html/quicktour2.html#1005005" target="_top">Contract
torbutton/en/design/index.html.en  226) ID</a>' (a human readable path-like string), and their '<a class="ulink" href="http://www.mozilla.org/projects/xpcom/book/cxc/html/quicktour2.html#1005329" target="_top">Class
torbutton/en/design/index.html.en  227) ID</a>' (a GUID hex-string). In addition, the interfaces they implement each have a hex
torbutton/en/design/index.html.en  228) 'Interface ID'. It is possible to 'hook' system components - to reimplement
torbutton/en/design/index.html.en  229) their interface members with your own wrappers - but only if the rest of the
torbutton/en/design/index.html.en  230) browser refers to the component by its Contract ID. If the browser refers to
torbutton/en/design/index.html.en  231) the component by Class ID, it bypasses your hooks in that use case.
torbutton/en/design/index.html.en  232) Technically, it may be possible to hook Class IDs by unregistering the
torbutton/en/design/index.html.en  233) original component, and then re-registering your own, but this relies on
torbutton/en/design/index.html.en  234) obsolete and deprecated interfaces and has proved to be less than
torbutton/en/design/index.html.en  235) stable.</p><p>'Chrome' is a combination of XML and Javascript used to describe a window.
torbutton/en/design/index.html.en  236) Extensions are allowed to create 'overlays' that are 'bound' to existing XML
torbutton/en/design/index.html.en  237) window definitions, or they can create their own windows. The DTD for this XML
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  238) is called <a class="ulink" href="http://developer.mozilla.org/en/docs/XUL_Reference" target="_top">XUL</a>.</p></div></div><div class="sect1" title="2. Components"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="components"></a>2. Components</h2></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  239) 
torbutton/en/design/index.html.en  240) Torbutton installs components for two purposes: hooking existing components to
torbutton/en/design/index.html.en  241) reimplement their interfaces; and creating new components that provide
torbutton/en/design/index.html.en  242) services to other pieces of the extension.
torbutton/en/design/index.html.en  243) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  244)   </p><div class="sect2" title="2.1. Hooked Components"><div class="titlepage"><div><div><h3 class="title"><a id="hookedxpcom"></a>2.1. Hooked Components</h3></div></div></div><p>Torbutton makes extensive use of Contract ID hooking, and implements some
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  245) of its own standalone components as well.  Let's discuss the hooked components
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  246) first.</p><div class="sect3" title="@mozilla.org/uriloader/external-protocol-service;1 , @mozilla.org/uriloader/external-helper-app-service;1, and @mozilla.org/mime;1 - components/external-app-blocker.js"><div class="titlepage"><div><div><h4 class="title"><a id="appblocker"></a><a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/uriloader/external-protocol-service%3B1" target="_top">@mozilla.org/uriloader/external-protocol-service;1
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  247) </a>, <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/uriloader/external-helper-app-service%3B1" target="_top">@mozilla.org/uriloader/external-helper-app-service;1</a>,
torbutton/en/design/index.html.en  248) and <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/mime%3B1" target="_top">@mozilla.org/mime;1</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  249) - <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/external-app-blocker.js" target="_top">components/external-app-blocker.js</a></h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  250) Due to <a class="link" href="#FirefoxBugs" title="6. Relevant Firefox Bugs">Firefox Bug</a> <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=440892" target="_top">440892</a> allowing Firefox 3.x to automatically launch some
torbutton/en/design/index.html.en  251) applications without user intervention, Torbutton had to wrap the three
torbutton/en/design/index.html.en  252) components involved in launching external applications to provide user
torbutton/en/design/index.html.en  253) confirmation before doing so while Tor is enabled. Since external applications
torbutton/en/design/index.html.en  254) do not obey proxy settings, they can be manipulated to automatically connect
torbutton/en/design/index.html.en  255) back to arbitrary servers outside of Tor with no user intervention. Fixing
torbutton/en/design/index.html.en  256) this issue helps to satisfy Torbutton's <a class="link" href="#proxy">Proxy
torbutton/en/design/index.html.en  257) Obedience</a> Requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  258)  </p></div><div class="sect3" title="@mozilla.org/browser/global-history;2 - components/ignore-history.js"><div class="titlepage"><div><div><h4 class="title"><a id="id2696239"></a><a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/browser/global-history;2" target="_top">@mozilla.org/browser/global-history;2</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  259) - <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/ignore-history.js" target="_top">components/ignore-history.js</a></h4></div></div></div><p>This component was contributed by <a class="ulink" href="http://www.collinjackson.com/" target="_top">Collin Jackson</a> as a method for defeating
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  260) CSS and Javascript-based methods of history disclosure. The global-history
torbutton/en/design/index.html.en  261) component is what is used by Firefox to determine if a link was visited or not
torbutton/en/design/index.html.en  262) (to apply the appropriate style to the link). By hooking the <a class="ulink" href="https://developer.mozilla.org/en/nsIGlobalHistory2#isVisited.28.29" target="_top">isVisited</a>
torbutton/en/design/index.html.en  263) and <a class="ulink" href="https://developer.mozilla.org/en/nsIGlobalHistory2#addURI.28.29" target="_top">addURI</a>
torbutton/en/design/index.html.en  264) methods, Torbutton is able to selectively prevent history items from being
torbutton/en/design/index.html.en  265) added or being displayed as visited, depending on the Tor state and the user's
torbutton/en/design/index.html.en  266) preferences.
torbutton/en/design/index.html.en  267) </p><p>
torbutton/en/design/index.html.en  268) This component helps satisfy the <a class="link" href="#state">State Separation</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  269) and <a class="link" href="#disk">Disk Avoidance</a> requirements of Torbutton. It
torbutton/en/design/index.html.en  270) is only needed for Firefox 3.x. On Firefox 4, we omit this component in favor
torbutton/en/design/index.html.en  271) of the <a class="ulink" href="https://developer.mozilla.org/en/CSS/Privacy_and_the_%3avisited_selector" target="_top">built-in
torbutton/en/design/index.html.en  272) history protections</a>.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  273) </p></div><div class="sect3" title="@mozilla.org/browser/livemark-service;2 - components/block-livemarks.js"><div class="titlepage"><div><div><h4 class="title"><a id="livemarks"></a><a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/browser/livemark-service;2" target="_top">@mozilla.org/browser/livemark-service;2</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  274) - <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/block-livemarks.js" target="_top">components/block-livemarks.js</a></h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  275) 
torbutton/en/design/index.html.en  276) The <a class="ulink" href="http://www.mozilla.com/en-US/firefox/livebookmarks.html" target="_top">livemark</a> service
torbutton/en/design/index.html.en  277) is started by a timer that runs 5 seconds after Firefox
torbutton/en/design/index.html.en  278) startup. As a result, we cannot simply call the stopUpdateLivemarks() method to
torbutton/en/design/index.html.en  279) disable it. We must wrap the component to prevent this start() call from
torbutton/en/design/index.html.en  280) firing in the event the browser starts in Tor mode.
torbutton/en/design/index.html.en  281) 
torbutton/en/design/index.html.en  282) </p><p>
torbutton/en/design/index.html.en  283) This component helps satisfy the <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  284) Isolation</a> and <a class="link" href="#setpreservation">Anonymity Set
torbutton/en/design/index.html.en  285) Preservation</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  286) </p></div></div><div class="sect2" title="2.2. New Components"><div class="titlepage"><div><div><h3 class="title"><a id="id2690319"></a>2.2. New Components</h3></div></div></div><p>Torbutton creates four new components that are used throughout the
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  287) extension. These components do not hook any interfaces, nor are they used
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  288) anywhere besides Torbutton itself.</p><div class="sect3" title="@torproject.org/cookie-jar-selector;2 - components/cookie-jar-selector.js"><div class="titlepage"><div><div><h4 class="title"><a id="cookiejar"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cookie-jar-selector.js" target="_top">@torproject.org/cookie-jar-selector;2
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  289) - components/cookie-jar-selector.js</a></h4></div></div></div><p>The cookie jar selector (also based on code from <a class="ulink" href="http://www.collinjackson.com/" target="_top">Collin
torbutton/en/design/index.html.en  290) Jackson</a>) is used by the Torbutton chrome to switch between
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  291) Tor and Non-Tor cookies. It stores an XML representation of the current
torbutton/en/design/index.html.en  292) cookie state in memory and/or on disk. When Tor is toggled, it syncs the
torbutton/en/design/index.html.en  293) current cookies to this XML store, and then loads the cookies for the other
torbutton/en/design/index.html.en  294) state from the XML store.
torbutton/en/design/index.html.en  295) </p><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  296) This component helps to address the <a class="link" href="#state">State
torbutton/en/design/index.html.en  297) Isolation</a> requirement of Torbutton.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  298) </p></div><div class="sect3" title="@torproject.org/torbutton-logger;1 - components/torbutton-logger.js"><div class="titlepage"><div><div><h4 class="title"><a id="id2683534"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/torbutton-logger.js" target="_top">@torproject.org/torbutton-logger;1
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  299) - components/torbutton-logger.js</a></h4></div></div></div><p>The torbutton logger component allows on-the-fly redirection of torbutton
torbutton/en/design/index.html.en  300) logging messages to either Firefox stderr
torbutton/en/design/index.html.en  301) (<span class="command"><strong>extensions.torbutton.logmethod=0</strong></span>), the Javascript error console
torbutton/en/design/index.html.en  302) (<span class="command"><strong>extensions.torbutton.logmethod=1</strong></span>), or the DebugLogger extension (if
torbutton/en/design/index.html.en  303) available - <span class="command"><strong>extensions.torbutton.logmethod=2</strong></span>). It also allows you to
torbutton/en/design/index.html.en  304) change the loglevel on the fly by changing
torbutton/en/design/index.html.en  305) <span class="command"><strong>extensions.torbutton.loglevel</strong></span> (1-5, 1 is most verbose).
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  306) </p></div><div class="sect3" title="@torproject.org/content-window-mapper;1 - components/window-mapper.js"><div class="titlepage"><div><div><h4 class="title"><a id="windowmapper"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/window-mapper.js" target="_top">@torproject.org/content-window-mapper;1
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  307) - components/window-mapper.js</a></h4></div></div></div><p>Torbutton tags Firefox <a class="ulink" href="https://developer.mozilla.org/en/XUL_Tutorial/Tabboxes" target="_top">tabs</a> with a special variable that indicates the Tor
torbutton/en/design/index.html.en  308) state the tab was most recently used under to fetch a page. The problem is
torbutton/en/design/index.html.en  309) that for many Firefox events, it is not possible to determine the tab that is
torbutton/en/design/index.html.en  310) actually receiving the event. The Torbutton window mapper allows the Torbutton
torbutton/en/design/index.html.en  311) chrome and other components to look up a <a class="ulink" href="https://developer.mozilla.org/en/XUL/tabbrowser" target="_top">browser
torbutton/en/design/index.html.en  312) tab</a> for a given <a class="ulink" href="https://developer.mozilla.org/en/nsIDOMWindow" target="_top">HTML content
torbutton/en/design/index.html.en  313) window</a>. It does this by traversing all windows and all browsers, until it
torbutton/en/design/index.html.en  314) finds the browser with the requested <a class="ulink" href="https://developer.mozilla.org/en/XUL/tabbrowser#p-contentWindow" target="_top">contentWindow</a> element. Since the content policy
torbutton/en/design/index.html.en  315) and page loading in general can generate hundreds of these lookups, this
torbutton/en/design/index.html.en  316) result is cached inside the component.
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  317) </p></div><div class="sect3" title="@torproject.org/crash-observer;1"><div class="titlepage"><div><div><h4 class="title"><a id="crashobserver"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/crash-observer.js" target="_top">@torproject.org/crash-observer;1</a></h4></div></div></div><p>
torbutton/en/design/index.html.en  318) 
torbutton/en/design/index.html.en  319) This component detects when Firefox crashes by altering Firefox prefs during
torbutton/en/design/index.html.en  320) runtime and checking for the same values at startup. It <a class="ulink" href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIPrefService#savePrefFile()" target="_top">synchronizes
torbutton/en/design/index.html.en  321) the preference service</a> to ensure the altered prefs are written to disk
torbutton/en/design/index.html.en  322) immediately.
torbutton/en/design/index.html.en  323) 
torbutton/en/design/index.html.en  324)   </p></div><div class="sect3" title="@torproject.org/torbutton-ss-blocker;1"><div class="titlepage"><div><div><h4 class="title"><a id="tbsessionstore"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/tbSessionStore.js" target="_top">@torproject.org/torbutton-ss-blocker;1</a></h4></div></div></div><p>
torbutton/en/design/index.html.en  325) 
torbutton/en/design/index.html.en  326) This component subscribes to the Firefox <a class="ulink" href="https://developer.mozilla.org/en/Observer_Notifications#Session_Store" target="_top">sessionstore-state-write</a>
torbutton/en/design/index.html.en  327) observer event to filter out URLs from tabs loaded during Tor, to prevent them
torbutton/en/design/index.html.en  328) from being written to disk. To do this, it checks the
torbutton/en/design/index.html.en  329) <span class="command"><strong>__tb_tor_fetched</strong></span> tag of tab objects before writing them out. If
torbutton/en/design/index.html.en  330) the tag is from a blocked Tor state, the tab is not written to disk.  This is
torbutton/en/design/index.html.en  331) a rather expensive operation that involves potentially very large JSON
torbutton/en/design/index.html.en  332) evaluations and object tree traversals, but it preferable to replacing the
torbutton/en/design/index.html.en  333) Firefox session store with our own implementation, which is what was done in
torbutton/en/design/index.html.en  334) years past.
torbutton/en/design/index.html.en  335) 
torbutton/en/design/index.html.en  336)   </p></div><div class="sect3" title="@torproject.org/torRefSpoofer;1"><div class="titlepage"><div><div><h4 class="title"><a id="refspoofer"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/torRefSpoofer.js" target="_top">@torproject.org/torRefSpoofer;1</a></h4></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  337) This component handles optional referer spoofing for Torbutton. It implements a
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  338) form of "smart" referer spoofing using <a class="ulink" href="https://developer.mozilla.org/en/Setting_HTTP_request_headers" target="_top">http-on-modify-request</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  339) to modify the Referer header. The code sends the default browser referer
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  340) header only if the destination domain is a suffix of the source, or if the
torbutton/en/design/index.html.en  341) source is a suffix of the destination. Otherwise, it sends no referer. This
torbutton/en/design/index.html.en  342) strange suffix logic is used as a heuristic: some rare sites on the web block
torbutton/en/design/index.html.en  343) requests without proper referer headers, and this logic is an attempt to cater
torbutton/en/design/index.html.en  344) to them. Unfortunately, it may not be enough. For example, google.fr will not
torbutton/en/design/index.html.en  345) send a referer to google.com using this logic. Hence, it is off by default.
torbutton/en/design/index.html.en  346)  </p></div><div class="sect3" title="@torproject.org/cssblocker;1 - components/cssblocker.js"><div class="titlepage"><div><div><h4 class="title"><a id="contentpolicy"></a><a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cssblocker.js" target="_top">@torproject.org/cssblocker;1
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  347) - components/cssblocker.js</a></h4></div></div></div><p>This is a key component to Torbutton's security measures. When Tor is
torbutton/en/design/index.html.en  348) toggled, Javascript is disabled, and pages are instructed to stop loading.
torbutton/en/design/index.html.en  349) However, CSS is still able to perform network operations by loading styles for
torbutton/en/design/index.html.en  350) onmouseover events and other operations. In addition, favicons can still be
torbutton/en/design/index.html.en  351) loaded by the browser. The cssblocker component prevents this by implementing
torbutton/en/design/index.html.en  352) and registering an <a class="ulink" href="https://developer.mozilla.org/en/nsIContentPolicy" target="_top">nsIContentPolicy</a>.
torbutton/en/design/index.html.en  353) When an nsIContentPolicy is registered, Firefox checks every attempted network
torbutton/en/design/index.html.en  354) request against its <a class="ulink" href="https://developer.mozilla.org/en/nsIContentPolicy#shouldLoad()" target="_top">shouldLoad</a>
torbutton/en/design/index.html.en  355) member function to determine if the load should proceed. In Torbutton's case,
torbutton/en/design/index.html.en  356) the content policy looks up the appropriate browser tab using the <a class="link" href="#windowmapper" title="@torproject.org/content-window-mapper;1 - components/window-mapper.js">window mapper</a>,
torbutton/en/design/index.html.en  357) and checks that tab's load tag against the current Tor state. If the tab was
torbutton/en/design/index.html.en  358) loaded in a different state than the current state, the fetch is denied.
torbutton/en/design/index.html.en  359) Otherwise, it is allowed.</p> This helps to achieve the <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  360) Isolation</a> requirements of Torbutton.
torbutton/en/design/index.html.en  361) 
torbutton/en/design/index.html.en  362) <p>In addition, the content policy also blocks website javascript from
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  363) <a class="ulink" href="http://webdevwonders.com/detecting-firefox-add-ons/" target="_top">querying for
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  364) versions and existence of extension chrome</a> while Tor is enabled, and
torbutton/en/design/index.html.en  365) also masks the presence of Torbutton to website javascript while Tor is
torbutton/en/design/index.html.en  366) disabled. </p><p>
torbutton/en/design/index.html.en  367) 
torbutton/en/design/index.html.en  368) Finally, some of the work that logically belongs to the content policy is
torbutton/en/design/index.html.en  369) instead handled by the <span class="command"><strong>torbutton_http_observer</strong></span> and
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  370) <span class="command"><strong>torbutton_weblistener</strong></span> in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.js" target="_top">torbutton.js</a>. These two objects handle blocking of
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  371) Firefox 3 favicon loads, popups, and full page plugins, which for whatever
torbutton/en/design/index.html.en  372) reason are not passed to the Firefox content policy itself (see Firefox Bugs 
torbutton/en/design/index.html.en  373) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=437014" target="_top">437014</a> and 
torbutton/en/design/index.html.en  374) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=401296" target="_top">401296</a>).
torbutton/en/design/index.html.en  375) 
torbutton/en/design/index.html.en  376) </p><p>
torbutton/en/design/index.html.en  377) 
torbutton/en/design/index.html.en  378) This helps to fulfill both the <a class="link" href="#setpreservation">Anonymity Set Preservation</a> and the <a class="link" href="#undiscoverability">Tor Undiscoverability</a> requirements of
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  379) Torbutton.</p></div></div></div><div class="sect1" title="3. Chrome"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2681735"></a>3. Chrome</h2></div></div></div><p>The chrome is where all the torbutton graphical elements and windows are
torbutton/en/design/index.html.en  380) located. </p><div class="sect2" title="3.1. XUL Windows and Overlays"><div class="titlepage"><div><div><h3 class="title"><a id="id2702019"></a>3.1. XUL Windows and Overlays</h3></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  381) Each window is described as an <a class="ulink" href="http://developer.mozilla.org/en/docs/XUL_Reference" target="_top">XML file</a>, with zero or more Javascript
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  382) files attached. The scope of these Javascript files is their containing
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  383) window. XUL files that add new elements and script to existing Firefox windows
torbutton/en/design/index.html.en  384) are called overlays.</p><div class="sect3" title="Browser Overlay - torbutton.xul"><div class="titlepage"><div><div><h4 class="title"><a id="browseroverlay"></a>Browser Overlay - <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.xul" target="_top">torbutton.xul</a></h4></div></div></div><p>The browser overlay, torbutton.xul, defines the toolbar button, the status
torbutton/en/design/index.html.en  385) bar, and events for toggling the button. The overlay code is in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.js" target="_top">chrome/content/torbutton.js</a>.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  386) It contains event handlers for preference update, shutdown, upgrade, and
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  387) location change events.</p></div><div class="sect3" title="Preferences Window - preferences.xul"><div class="titlepage"><div><div><h4 class="title"><a id="id2704559"></a>Preferences Window - <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/preferences.xul" target="_top">preferences.xul</a></h4></div></div></div><p>The preferences window of course lays out the Torbutton preferences, with
torbutton/en/design/index.html.en  388) handlers located in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/preferences.js" target="_top">chrome/content/preferences.js</a>.</p></div><div class="sect3" title="Other Windows"><div class="titlepage"><div><div><h4 class="title"><a id="id2669673"></a>Other Windows</h4></div></div></div><p>There are additional windows that describe popups for right clicking on
torbutton/en/design/index.html.en  389) the status bar, the toolbutton, and the about page.</p></div></div><div class="sect2" title="3.2. Major Chrome Observers"><div class="titlepage"><div><div><h3 class="title"><a id="id2694797"></a>3.2. Major Chrome Observers</h3></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  390) In addition to the <a class="link" href="#components" title="2. Components">components described
torbutton/en/design/index.html.en  391) above</a>, Torbutton also instantiates several observers in the browser
torbutton/en/design/index.html.en  392) overlay window. These mostly grew due to scoping convenience, and many should
torbutton/en/design/index.html.en  393) probably be relocated into their own components.
torbutton/en/design/index.html.en  394)  </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>torbutton_window_pref_observer</strong></span><p>
torbutton/en/design/index.html.en  395) This is an observer that listens for Torbutton state changes, for the purposes
torbutton/en/design/index.html.en  396) of updating the Torbutton button graphic as the Tor state changes.
torbutton/en/design/index.html.en  397)     </p></li><li class="listitem"><span class="command"><strong>torbutton_unique_pref_observer</strong></span><p>
torbutton/en/design/index.html.en  398) 
torbutton/en/design/index.html.en  399) This is an observer that only runs in one window, called the main window. It
torbutton/en/design/index.html.en  400) listens for changes to all of the Torbutton preferences, as well as Torbutton
torbutton/en/design/index.html.en  401) controlled Firefox preferences. It is what carries out the toggle path when
torbutton/en/design/index.html.en  402) the proxy settings change. When the main window is closed, the
torbutton/en/design/index.html.en  403) torbutton_close_window event handler runs to dub a new window the "main
torbutton/en/design/index.html.en  404) window".
torbutton/en/design/index.html.en  405) 
torbutton/en/design/index.html.en  406)     </p></li><li class="listitem"><span class="command"><strong>tbHistoryListener</strong></span><p>
torbutton/en/design/index.html.en  407) The tbHistoryListener exists to prevent client window Javascript from
torbutton/en/design/index.html.en  408) interacting with window.history to forcibly navigate a user to a tab session
torbutton/en/design/index.html.en  409) history entry from a different Tor state. It also expunges the window.history
torbutton/en/design/index.html.en  410) entries during toggle. This listener helps Torbutton
torbutton/en/design/index.html.en  411) satisfy the <a class="link" href="#isolation">Network Isolation</a> requirement as
torbutton/en/design/index.html.en  412) well as the <a class="link" href="#state">State Separation</a> requirement.
torbutton/en/design/index.html.en  413) 
torbutton/en/design/index.html.en  414)     </p></li><li class="listitem"><span class="command"><strong>torbutton_http_observer</strong></span><p>
torbutton/en/design/index.html.en  415) 
torbutton/en/design/index.html.en  416) The torbutton_http_observer performs some of the work that logically belongs
torbutton/en/design/index.html.en  417) to the content policy. This handles blocking of
torbutton/en/design/index.html.en  418) Firefox 3 favicon loads, which for whatever
torbutton/en/design/index.html.en  419) reason are not passed to the Firefox content policy itself (see Firefox Bugs
torbutton/en/design/index.html.en  420) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=437014" target="_top">437014</a> and
torbutton/en/design/index.html.en  421) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=401296" target="_top">401296</a>).
torbutton/en/design/index.html.en  422) 
torbutton/en/design/index.html.en  423)     </p><p>
torbutton/en/design/index.html.en  424) The observer is also responsible for redirecting users to alternate
torbutton/en/design/index.html.en  425) search engines when Google presents them with a Captcha, as well as copying
torbutton/en/design/index.html.en  426) Google Captcha-related cookies between international Google domains.
torbutton/en/design/index.html.en  427)     </p></li><li class="listitem"><span class="command"><strong>torbutton_proxyservice</strong></span><p>
torbutton/en/design/index.html.en  428) The Torbutton proxy service handles redirecting Torbutton-related update
torbutton/en/design/index.html.en  429) checks on addons.mozilla.org through Tor. This is done to help satisfy the
torbutton/en/design/index.html.en  430) <a class="link" href="#undiscoverability">Tor Undiscoverability</a> requirement.
torbutton/en/design/index.html.en  431)     </p></li><li class="listitem"><span class="command"><strong>torbutton_weblistener</strong></span><p>The <a class="ulink" href="https://developer.mozilla.org/en/nsIWebProgressListener#onLocationChange" target="_top">location
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  432) change</a> <a class="ulink" href="https://developer.mozilla.org/en/nsIWebProgress" target="_top">webprogress
torbutton/en/design/index.html.en  433) listener</a>, <span class="command"><strong>torbutton_weblistener</strong></span> is one of the most
torbutton/en/design/index.html.en  434) important parts of the chrome from a security standpoint. It is a <a class="ulink" href="https://developer.mozilla.org/en/nsIWebProgressListener" target="_top">webprogress
torbutton/en/design/index.html.en  435) listener</a> that handles receiving an event every time a page load or
torbutton/en/design/index.html.en  436) iframe load occurs. This class eventually calls down to
torbutton/en/design/index.html.en  437) <code class="function">torbutton_update_tags()</code> and
torbutton/en/design/index.html.en  438) <code class="function">torbutton_hookdoc()</code>, which apply the browser Tor load
torbutton/en/design/index.html.en  439) state tags, plugin permissions, and install the Javascript hooks to hook the
torbutton/en/design/index.html.en  440) <a class="ulink" href="https://developer.mozilla.org/en/DOM/window.screen" target="_top">window.screen</a>
torbutton/en/design/index.html.en  441) object to obfuscate browser and desktop resolution information.
torbutton/en/design/index.html.en  442) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  443) </p></li></ol></div></div></div><div class="sect1" title="4. Toggle Code Path"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2696524"></a>4. Toggle Code Path</h2></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  444) 
torbutton/en/design/index.html.en  445) The act of toggling is connected to <code class="function">torbutton_toggle()</code>
torbutton/en/design/index.html.en  446) via the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.xul" target="_top">torbutton.xul</a>
torbutton/en/design/index.html.en  447) and <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/popup.xul" target="_top">popup.xul</a>
torbutton/en/design/index.html.en  448) overlay files. Most of the work in the toggling process is present in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.js" target="_top">torbutton.js</a> 
torbutton/en/design/index.html.en  449) 
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  450) </p><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  451) 
torbutton/en/design/index.html.en  452) Toggling is a 3 stage process: Button Click, Proxy Update, and
torbutton/en/design/index.html.en  453) Settings Update. These stages are reflected in the prefs
torbutton/en/design/index.html.en  454) <span class="command"><strong>extensions.torbutton.tor_enabled</strong></span>,
torbutton/en/design/index.html.en  455) <span class="command"><strong>extensions.torbutton.proxies_applied</strong></span>, and
torbutton/en/design/index.html.en  456) <span class="command"><strong>extensions.torbutton.settings_applied</strong></span>. The reason for the
torbutton/en/design/index.html.en  457) three stage preference update is to ensure immediate enforcement of <a class="link" href="#isolation">Network Isolation</a> via the <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">content policy</a>. Since the content window
torbutton/en/design/index.html.en  458) javascript runs on a different thread than the chrome javascript, it is
torbutton/en/design/index.html.en  459) important to properly convey the stages to the content policy to avoid race
torbutton/en/design/index.html.en  460) conditions and leakage, especially with <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=409737" target="_top">Firefox Bug 
torbutton/en/design/index.html.en  461) 409737</a> unfixed. The content policy does not allow any network activity
torbutton/en/design/index.html.en  462) whatsoever during this three stage transition.
torbutton/en/design/index.html.en  463) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  464)  </p><div class="sect2" title="4.1. Button Click"><div class="titlepage"><div><div><h3 class="title"><a id="id2699452"></a>4.1. Button Click</h3></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  465) 
torbutton/en/design/index.html.en  466) This is the first step in the toggling process. When the user clicks the
torbutton/en/design/index.html.en  467) toggle button or the toolbar, <code class="function">torbutton_toggle()</code> is
torbutton/en/design/index.html.en  468) called. This function checks the current Tor status by comparing the current
torbutton/en/design/index.html.en  469) proxy settings to the selected Tor settings, and then sets the proxy settings
torbutton/en/design/index.html.en  470) to the opposite state, and sets the pref
torbutton/en/design/index.html.en  471) <span class="command"><strong>extensions.torbutton.tor_enabled</strong></span> to reflect the new state.
torbutton/en/design/index.html.en  472) It is this proxy pref update that gives notification via the <a class="ulink" href="https://developer.mozilla.org/en/NsIPrefBranch2#addObserver.28.29" target="_top">pref
torbutton/en/design/index.html.en  473) observer</a>
torbutton/en/design/index.html.en  474) <span class="command"><strong>torbutton_unique_pref_observer</strong></span> to perform the rest of the
torbutton/en/design/index.html.en  475) toggle.
torbutton/en/design/index.html.en  476) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  477)   </p></div><div class="sect2" title="4.2. Proxy Update"><div class="titlepage"><div><div><h3 class="title"><a id="id2697978"></a>4.2. Proxy Update</h3></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  478) 
torbutton/en/design/index.html.en  479) When Torbutton receives any proxy change notifications via its
torbutton/en/design/index.html.en  480) <span class="command"><strong>torbutton_unique_pref_observer</strong></span>, it calls
torbutton/en/design/index.html.en  481) <code class="function">torbutton_set_status()</code> which checks against the Tor
torbutton/en/design/index.html.en  482) settings to see if the Tor proxy settings match the current settings. If so,
torbutton/en/design/index.html.en  483) it calls <code class="function">torbutton_update_status()</code>, which determines if
torbutton/en/design/index.html.en  484) the Tor state has actually changed, and sets
torbutton/en/design/index.html.en  485) <span class="command"><strong>extensions.torbutton.proxies_applied</strong></span> to the appropriate Tor
torbutton/en/design/index.html.en  486) state value, and ensures that
torbutton/en/design/index.html.en  487) <span class="command"><strong>extensions.torbutton.tor_enabled</strong></span> is also set to the correct
torbutton/en/design/index.html.en  488) value. This is decoupled from the button click functionality via the pref
torbutton/en/design/index.html.en  489) observer so that other addons (such as SwitchProxy) can switch the proxy
torbutton/en/design/index.html.en  490) settings between multiple proxies.
torbutton/en/design/index.html.en  491) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  492)   </p></div><div class="sect2" title="4.3. Settings Update"><div class="titlepage"><div><div><h3 class="title"><a id="id2697015"></a>4.3. Settings Update</h3></div></div></div><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  493) 
torbutton/en/design/index.html.en  494) The next stage is also handled by
torbutton/en/design/index.html.en  495) <code class="function">torbutton_update_status()</code>. This function sets scores of
torbutton/en/design/index.html.en  496) Firefox preferences, saving the original values to prefs under
torbutton/en/design/index.html.en  497) <span class="command"><strong>extensions.torbutton.saved.*</strong></span>, and performs the <a class="link" href="#cookiejar" title="@torproject.org/cookie-jar-selector;2 - components/cookie-jar-selector.js">cookie jarring</a>, state clearing (such as window.name
torbutton/en/design/index.html.en  498) and DOM storage), and <a class="link" href="#preferences" title="4.4. Firefox preferences touched during Toggle">preference
torbutton/en/design/index.html.en  499) toggling</a>. At the
torbutton/en/design/index.html.en  500) end of its work, it sets
torbutton/en/design/index.html.en  501) <span class="command"><strong>extensions.torbutton.settings_applied</strong></span>, which signifies the
torbutton/en/design/index.html.en  502) completion of the toggle operation to the <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">content policy</a>.
torbutton/en/design/index.html.en  503) 
torbutton/en/design/index.html.en  504)   </p></div><div class="sect2" title="4.4. Firefox preferences touched during Toggle"><div class="titlepage"><div><div><h3 class="title"><a id="preferences"></a>4.4. Firefox preferences touched during Toggle</h3></div></div></div><p>
torbutton/en/design/index.html.en  505) There are also a number of Firefox preferences set in
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  506) <code class="function">torbutton_update_status()</code> that aren't governed by any
torbutton/en/design/index.html.en  507) Torbutton setting. These are:
torbutton/en/design/index.html.en  508) </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Network.security.ports.banned" target="_top">network.security.ports.banned</a><p>
torbutton/en/design/index.html.en  509) Torbutton sets this setting to add ports 8123, 8118, 9050 and 9051 (which it
torbutton/en/design/index.html.en  510) reads from <span class="command"><strong>extensions.torbutton.banned_ports</strong></span>) to the list
torbutton/en/design/index.html.en  511) of ports Firefox is forbidden to access. These ports are Polipo, Privoxy, Tor,
torbutton/en/design/index.html.en  512) and the Tor control port, respectively. This is set for both Tor and Non-Tor
torbutton/en/design/index.html.en  513) usage, and prevents websites from attempting to do http fetches from these
torbutton/en/design/index.html.en  514) ports to see if they are open, which addresses the <a class="link" href="#undiscoverability">Tor Undiscoverability</a> requirement.
torbutton/en/design/index.html.en  515)  </p></li><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Browser.send_pings" target="_top">browser.send_pings</a><p>
torbutton/en/design/index.html.en  516) This setting is currently always disabled. If anyone ever complains saying
torbutton/en/design/index.html.en  517) that they *want* their browser to be able to send ping notifications to a
torbutton/en/design/index.html.en  518) page or arbitrary link, I'll make this a pref or Tor-only. But I'm not holding
torbutton/en/design/index.html.en  519) my breath. I haven't checked if the content policy is called for pings, but if
torbutton/en/design/index.html.en  520) not, this setting helps with meeting the <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  521) Isolation</a> requirement.
torbutton/en/design/index.html.en  522)  </p></li><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Browser.safebrowsing.remoteLookups" target="_top">browser.safebrowsing.remoteLookups</a><p>
torbutton/en/design/index.html.en  523) Likewise for this setting. I find it hard to imagine anyone who wants to ask
torbutton/en/design/index.html.en  524) Google in real time if each URL they visit is safe, especially when the list
torbutton/en/design/index.html.en  525) of unsafe URLs is downloaded anyway. This helps fulfill the <a class="link" href="#disk">Disk Avoidance</a> requirement, by preventing your entire
torbutton/en/design/index.html.en  526) browsing history from ending up on Google's disks.
torbutton/en/design/index.html.en  527)  </p></li><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Browser.safebrowsing.enabled" target="_top">browser.safebrowsing.enabled</a><p>
torbutton/en/design/index.html.en  528) Safebrowsing does <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=360387" target="_top">unauthenticated
torbutton/en/design/index.html.en  529) updates under Firefox 2</a>, so it is disabled during Tor usage. 
torbutton/en/design/index.html.en  530) This helps fulfill the <a class="link" href="#updates">Update
torbutton/en/design/index.html.en  531) Safety</a> requirement. Firefox 3 has the fix for that bug, and so
torbutton/en/design/index.html.en  532) safebrowsing updates are enabled during Tor usage.
torbutton/en/design/index.html.en  533)  </p></li><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Network.protocol-handler.warn-external.%28protocol%29" target="_top">network.protocol-handler.warn-external.(protocol)</a><p>
torbutton/en/design/index.html.en  534) If Tor is enabled, we need to prevent random external applications from
torbutton/en/design/index.html.en  535) launching without at least warning the user. This group of settings only
torbutton/en/design/index.html.en  536) partially accomplishes this, however. Applications can still be launched via
torbutton/en/design/index.html.en  537) plugins. The mechanisms for handling this are described under the "Disable
torbutton/en/design/index.html.en  538) Plugins During Tor Usage" preference. This helps fulfill the <a class="link" href="#proxy">Proxy Obedience</a> requirement, by preventing external
torbutton/en/design/index.html.en  539) applications from accessing network resources at the command of Tor-fetched
torbutton/en/design/index.html.en  540) pages. Unfortunately, due to <a class="link" href="#FirefoxBugs" title="6. Relevant Firefox Bugs">Firefox Bug</a>
torbutton/en/design/index.html.en  541) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=440892" target="_top">440892</a>,
torbutton/en/design/index.html.en  542) these prefs are no longer obeyed. They are set still anyway out of respect for
torbutton/en/design/index.html.en  543) the dead.
torbutton/en/design/index.html.en  544)  </p></li><li class="listitem"><a class="ulink" href="http://kb.mozillazine.org/Browser.sessionstore.max_tabs_undo" target="_top">browser.sessionstore.max_tabs_undo</a><p>
torbutton/en/design/index.html.en  545) 
torbutton/en/design/index.html.en  546) To help satisfy the Torbutton <a class="link" href="#state">State Separation</a>
torbutton/en/design/index.html.en  547) and <a class="link" href="#isolation">Network Isolation</a> requirements,
torbutton/en/design/index.html.en  548) Torbutton needs to purge the Undo Tab history on toggle to prevent repeat
torbutton/en/design/index.html.en  549) "Undo Close" operations from accidentally restoring tabs from a different Tor
torbutton/en/design/index.html.en  550) State. This purge is accomplished by setting this preference to 0 and then
torbutton/en/design/index.html.en  551) restoring it to the previous user value upon toggle.
torbutton/en/design/index.html.en  552) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  553)    </p></li><li class="listitem"><span class="command"><strong>security.enable_ssl2</strong></span> or <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/interfaces/nsIDOMCrypto" target="_top">nsIDOMCrypto::logout()</a><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  554) TLS Session IDs can persist for an indefinite duration, providing an
torbutton/en/design/index.html.en  555) identifier that is sent to TLS sites that can be used to link activity. This
torbutton/en/design/index.html.en  556) is particularly troublesome now that we have certificate verification in place
torbutton/en/design/index.html.en  557) in Firefox 3: The OCSP server can use this Session ID to build a history of
torbutton/en/design/index.html.en  558) TLS sites someone visits, and also correlate their activity as users move from
torbutton/en/design/index.html.en  559) network to network (such as home to work to coffee shop, etc), inside and
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  560) outside of Tor. To handle this and to help satisfy our <a class="link" href="#state">State Separation Requirement</a>, we call the logout()
torbutton/en/design/index.html.en  561) function of nsIDOMCrypto. Since this may be absent, or may fail, we fall back
torbutton/en/design/index.html.en  562) to toggling
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  563) <span class="command"><strong>security.enable_ssl2</strong></span>, which clears the SSL Session ID
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  564) cache via the pref observer at <a class="ulink" href="http://mxr.mozilla.org/security/source/security/manager/ssl/src/nsNSSComponent.cpp" target="_top">nsNSSComponent.cpp</a>.
torbutton/en/design/index.html.en  565)    </p></li><li class="listitem"><span class="command"><strong>security.OCSP.enabled</strong></span><p>
torbutton/en/design/index.html.en  566) Similarly, we toggle <span class="command"><strong>security.OCSP.enabled</strong></span>, which clears the OCSP certificate
torbutton/en/design/index.html.en  567) validation cache via the pref observer at <a class="ulink" href="http://mxr.mozilla.org/security/source/security/manager/ssl/src/nsNSSComponent.cpp" target="_top">nsNSSComponent.cpp</a>.
torbutton/en/design/index.html.en  568) In this way, exit nodes will not be able to fingerprint you
torbutton/en/design/index.html.en  569) based the fact that non-Tor OCSP lookups were obviously previously cached.
torbutton/en/design/index.html.en  570) To handle this and to help satisfy our <a class="link" href="#state">State Separation Requirement</a>,
torbutton/en/design/index.html.en  571)    </p></li><li class="listitem"><span class="command"><strong><a class="ulink" href="http://kb.mozillazine.org/Updating_extensions#Disabling_update_checks_for_individual_add-ons_-_Advanced_users" target="_top">extensions.e0204bd5-9d31-402b-a99d-a6aa8ffebdca.getAddons.cache.enabled</a></strong></span><p>
torbutton/en/design/index.html.en  572) We permanently disable addon usage statistic reporting to the
torbutton/en/design/index.html.en  573) addons.mozilla.org statistics engine. These statistics send version
torbutton/en/design/index.html.en  574) information about Torbutton users via non-Tor, allowing their Tor use to be
torbutton/en/design/index.html.en  575) uncovered. Disabling this reporting helps Torbutton to satisfy its <a class="link" href="#undiscoverability">Tor Undiscoverability</a> requirement.
torbutton/en/design/index.html.en  576) 
torbutton/en/design/index.html.en  577)   </p></li><li class="listitem"><span class="command"><strong><a class="ulink" href="http://www.mozilla.com/en-US/firefox/geolocation/" target="_top">geo.enabled</a></strong></span><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  578) 
torbutton/en/design/index.html.en  579) Torbutton disables Geolocation support in Firefox 3.5 and above whenever tor
torbutton/en/design/index.html.en  580) is enabled. This helps Torbutton maintain its
torbutton/en/design/index.html.en  581) <a class="link" href="#location">Location Neutrality</a> requirement.
torbutton/en/design/index.html.en  582) While Firefox does prompt before divulging geolocational information,
torbutton/en/design/index.html.en  583) the assumption is that Tor users will never want to give their
torbutton/en/design/index.html.en  584) location away during Tor usage, and even allowing websites to prompt
torbutton/en/design/index.html.en  585) them to do so will only cause confusion and accidents to happen. Moreover,
torbutton/en/design/index.html.en  586) just because users may approve a site to know their location in non-Tor mode
torbutton/en/design/index.html.en  587) does not mean they want it divulged during Tor mode.
torbutton/en/design/index.html.en  588) 
torbutton/en/design/index.html.en  589)    </p></li><li class="listitem"><span class="command"><strong><a class="ulink" href="http://kb.mozillazine.org/Browser.zoom.siteSpecific" target="_top">browser.zoom.siteSpecific</a></strong></span><p>
torbutton/en/design/index.html.en  590) 
torbutton/en/design/index.html.en  591) Firefox actually remembers your zoom settings for certain sites. CSS
torbutton/en/design/index.html.en  592) and Javascript rule can use this to recognize previous visitors to a site.
torbutton/en/design/index.html.en  593) This helps Torbutton fulfill its <a class="link" href="#state">State Separation</a>
torbutton/en/design/index.html.en  594) requirement.
torbutton/en/design/index.html.en  595) 
torbutton/en/design/index.html.en  596)    </p></li><li class="listitem"><span class="command"><strong><a class="ulink" href="https://developer.mozilla.org/en/controlling_dns_prefetching" target="_top">network.dns.disablePrefetch</a></strong></span><p>
torbutton/en/design/index.html.en  597) 
torbutton/en/design/index.html.en  598) Firefox 3.5 and above implement prefetching of DNS resolution for hostnames in
torbutton/en/design/index.html.en  599) links on a page to decrease page load latency. While Firefox does typically
torbutton/en/design/index.html.en  600) disable this behavior when proxies are enabled, we set this pref for added
torbutton/en/design/index.html.en  601) safety during Tor usage. Additionally, to prevent Tor-loaded tabs from having
torbutton/en/design/index.html.en  602) their links prefetched after a toggle to Non-Tor mode occurs,
torbutton/en/design/index.html.en  603) we also set the docShell attribute
torbutton/en/design/index.html.en  604) <a class="ulink" href="http://www.oxymoronical.com/experiments/apidocs/interface/nsIDocShell" target="_top">
torbutton/en/design/index.html.en  605) allowDNSPrefetch</a> to false on Tor loaded tabs. This happens in the same
torbutton/en/design/index.html.en  606) positions in the code as those for disabling plugins via the allowPlugins
torbutton/en/design/index.html.en  607) docShell attribute. This helps Torbutton fulfill its <a class="link" href="#isolation">Network Isolation</a> requirement.
torbutton/en/design/index.html.en  608) 
torbutton/en/design/index.html.en  609)    </p></li><li class="listitem"><span class="command"><strong><a class="ulink" href="http://kb.mozillazine.org/Browser.cache.offline.enable" target="_top">browser.cache.offline.enable</a></strong></span><p>
torbutton/en/design/index.html.en  610) 
torbutton/en/design/index.html.en  611) Firefox has the ability to store web applications in a special cache to allow
torbutton/en/design/index.html.en  612) them to continue to operate while the user is offline. Since this subsystem
torbutton/en/design/index.html.en  613) is actually different than the normal disk cache, it must be dealt with
torbutton/en/design/index.html.en  614) separately. Thus, Torbutton sets this preference to false whenever Tor is
torbutton/en/design/index.html.en  615) enabled. This helps Torbutton fulfill its <a class="link" href="#disk">Disk
torbutton/en/design/index.html.en  616) Avoidance</a> and <a class="link" href="#state">State Separation</a>
torbutton/en/design/index.html.en  617) requirements.
torbutton/en/design/index.html.en  618) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  619)    </p></li></ol></div></div></div><div class="sect1" title="5. Description of Options"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2702702"></a>5. Description of Options</h2></div></div></div><p>This section provides a detailed description of Torbutton's options. Each
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  620) option is presented as the string from the preferences window, a summary, the
torbutton/en/design/index.html.en  621) preferences it touches, and the effect this has on the components, chrome, and
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  622) browser properties.</p><div class="sect2" title="5.1. Proxy Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2704948"></a>5.1. Proxy Settings</h3></div></div></div><div class="sect3" title="Test Settings"><div class="titlepage"><div><div><h4 class="title"><a id="id2683681"></a>Test Settings</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  623) This button under the Proxy Settings tab provides a way to verify that the 
torbutton/en/design/index.html.en  624) proxy settings are correct, and actually do route through the Tor network. It
torbutton/en/design/index.html.en  625) performs this check by issuing an <a class="ulink" href="http://developer.mozilla.org/en/docs/XMLHttpRequest" target="_top">XMLHTTPRequest</a>
torbutton/en/design/index.html.en  626) for <a class="ulink" href="https://check.torproject.org/?TorButton=True" target="_top">https://check.torproject.org/?Torbutton=True</a>.
torbutton/en/design/index.html.en  627) This is a special page that returns very simple, yet well-formed XHTML that
torbutton/en/design/index.html.en  628) Torbutton can easily inspect for a hidden link with an id of
torbutton/en/design/index.html.en  629) <span class="command"><strong>TorCheckResult</strong></span> and a target of <span class="command"><strong>success</strong></span>
torbutton/en/design/index.html.en  630) or <span class="command"><strong>failure</strong></span> to indicate if the
torbutton/en/design/index.html.en  631) user hit the page from a Tor IP, a non-Tor IP. This check is handled in
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  632) <code class="function">torbutton_test_settings()</code> in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.js" target="_top">torbutton.js</a>.
torbutton/en/design/index.html.en  633) Presenting the results to the user is handled by the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/preferences.xul" target="_top">preferences
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  634) window</a>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  635) callback <code class="function">torbutton_prefs_test_settings()</code> in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/preferences.js" target="_top">preferences.js</a>.  
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  636) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  637)   </p></div></div><div class="sect2" title="5.2. Dynamic Content Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2686645"></a>5.2. Dynamic Content Settings</h3></div></div></div><div class="sect3" title="Disable plugins on Tor Usage (crucial)"><div class="titlepage"><div><div><h4 class="title"><a id="plugins"></a>Disable plugins on Tor Usage (crucial)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.no_tor_plugins</strong></span></p><p>Java and plugins <a class="ulink" href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/class-use/NetworkInterface.html" target="_top">can query</a> the <a class="ulink" href="http://www.rgagnon.com/javadetails/java-0095.html" target="_top">local IP
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  638) address</a> and report it back to the
torbutton/en/design/index.html.en  639) remote site. They can also <a class="ulink" href="http://decloak.net" target="_top">bypass proxy settings</a> and directly connect to a
torbutton/en/design/index.html.en  640) remote site without Tor. Every browser plugin we have tested with Firefox has
torbutton/en/design/index.html.en  641) some form of network capability, and every one ignores proxy settings or worse - only
torbutton/en/design/index.html.en  642) partially obeys them. This includes but is not limited to:
torbutton/en/design/index.html.en  643) QuickTime, Windows Media Player, RealPlayer, mplayerplug-in, AcroRead, and
torbutton/en/design/index.html.en  644) Flash. 
torbutton/en/design/index.html.en  645) 
torbutton/en/design/index.html.en  646)  </p><p>
torbutton/en/design/index.html.en  647) Enabling this preference causes the above mentioned Torbutton chrome web progress
torbutton/en/design/index.html.en  648)  listener <span class="command"><strong>torbutton_weblistener</strong></span> to disable Java via <span class="command"><strong>security.enable_java</strong></span> and to disable
torbutton/en/design/index.html.en  649)  plugins via the browser <a class="ulink" href="https://developer.mozilla.org/en/XUL%3aProperty%3adocShell" target="_top">docShell</a>
torbutton/en/design/index.html.en  650)  attribute <span class="command"><strong>allowPlugins</strong></span>. These flags are set every time a new window is
torbutton/en/design/index.html.en  651)  created (<code class="function">torbutton_tag_new_browser()</code>), every time a web
torbutton/en/design/index.html.en  652) load
torbutton/en/design/index.html.en  653) event occurs
torbutton/en/design/index.html.en  654)  (<code class="function">torbutton_update_tags()</code>), and every time the tor state is changed
torbutton/en/design/index.html.en  655)  (<code class="function">torbutton_update_status()</code>). As a backup measure, plugins are also
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  656)  prevented from loading by the content policy in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cssblocker.js" target="_top">@torproject.org/cssblocker;1</a> if Tor is
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  657)  enabled and this option is set.
torbutton/en/design/index.html.en  658)  </p><p>All of this turns out to be insufficient if the user directly clicks
torbutton/en/design/index.html.en  659) on a plugin-handled mime-type. <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=401296" target="_top">In this case</a>,
torbutton/en/design/index.html.en  660) the browser decides that maybe it should ignore all these other settings and
torbutton/en/design/index.html.en  661) load the plugin anyways, because maybe the user really did want to load it
torbutton/en/design/index.html.en  662) (never mind this same load-style could happen automatically  with meta-refresh
torbutton/en/design/index.html.en  663) or any number of other ways..). To handle these cases, Torbutton stores a list
torbutton/en/design/index.html.en  664) of plugin-handled mime-types, and sets the pref
torbutton/en/design/index.html.en  665) <span class="command"><strong>plugin.disable_full_page_plugin_for_types</strong></span> to this list.
torbutton/en/design/index.html.en  666) Additionally, (since nothing can be assumed when relying on Firefox
torbutton/en/design/index.html.en  667) preferences and internals) if it detects a load of one of them from the web
torbutton/en/design/index.html.en  668) progress listener, it cancels the request, tells the associated DOMWindow to
torbutton/en/design/index.html.en  669) stop loading, clears the document, AND throws an exception. Anything short of
torbutton/en/design/index.html.en  670) all this and the plugin managed to find some way to load.
torbutton/en/design/index.html.en  671)  </p><p>
torbutton/en/design/index.html.en  672)  All this could be avoided, of course, if Firefox would either <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=401296" target="_top">obey
torbutton/en/design/index.html.en  673)  allowPlugins</a> for directly visited URLs, or notify its content policy for such
torbutton/en/design/index.html.en  674)  loads either <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=309524" target="_top">via</a> <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=380556" target="_top">shouldProcess</a> or shouldLoad. The fact that it does not is
torbutton/en/design/index.html.en  675)  not very encouraging.
torbutton/en/design/index.html.en  676)  </p><p>
torbutton/en/design/index.html.en  677) 
torbutton/en/design/index.html.en  678) Since most plugins completely ignore browser proxy settings, the actions
torbutton/en/design/index.html.en  679) performed by this setting are crucial to satisfying the <a class="link" href="#proxy">Proxy Obedience</a> requirement.
torbutton/en/design/index.html.en  680) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  681)  </p></div><div class="sect3" title="Isolate Dynamic Content to Tor State (crucial)"><div class="titlepage"><div><div><h4 class="title"><a id="id2688604"></a>Isolate Dynamic Content to Tor State (crucial)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.isolate_content</strong></span></p><p>Enabling this preference is what enables the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cssblocker.js" target="_top">@torproject.org/cssblocker;1</a> content policy
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  682) mentioned above, and causes it to block content load attempts in pages an
torbutton/en/design/index.html.en  683) opposite Tor state from the current state. Freshly loaded <a class="ulink" href="https://developer.mozilla.org/en/XUL/tabbrowser" target="_top">browser
torbutton/en/design/index.html.en  684) tabs</a> are tagged
torbutton/en/design/index.html.en  685) with a <span class="command"><strong>__tb_load_state</strong></span> member in
torbutton/en/design/index.html.en  686) <code class="function">torbutton_update_tags()</code> and this
torbutton/en/design/index.html.en  687) value is compared against the current tor state in the content policy.</p><p>It also kills all Javascript in each page loaded under that state by
torbutton/en/design/index.html.en  688) toggling the <span class="command"><strong>allowJavascript</strong></span> <a class="ulink" href="https://developer.mozilla.org/en/XUL%3aProperty%3adocShell" target="_top">docShell</a> property, and issues a
torbutton/en/design/index.html.en  689) <a class="ulink" href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWebNavigation#stop()" target="_top">webNavigation.stop(webNavigation.STOP_ALL)</a> to each browser tab (the
torbutton/en/design/index.html.en  690) equivalent of hitting the STOP button).</p><p>
torbutton/en/design/index.html.en  691) 
torbutton/en/design/index.html.en  692) Unfortunately, <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=409737" target="_top">Firefox bug
torbutton/en/design/index.html.en  693) 409737</a> prevents <span class="command"><strong>docShell.allowJavascript</strong></span> from killing
torbutton/en/design/index.html.en  694) all event handlers, and event handlers registered with <a class="ulink" href="http://developer.mozilla.org/en/docs/DOM:element.addEventListener" target="_top">addEventListener()</a>
torbutton/en/design/index.html.en  695) are still able to execute. The <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">Torbutton Content
torbutton/en/design/index.html.en  696) Policy</a> should prevent such code from performing network activity within
torbutton/en/design/index.html.en  697) the current tab, but activity that happens via a popup window or via a
torbutton/en/design/index.html.en  698) Javascript redirect can still slip by. For this reason, Torbutton blocks
torbutton/en/design/index.html.en  699) popups by checking for a valid <a class="ulink" href="http://developer.mozilla.org/en/docs/DOM:window.opener" target="_top">window.opener</a>
torbutton/en/design/index.html.en  700) attribute in <code class="function">torbutton_check_progress()</code>. If the window
torbutton/en/design/index.html.en  701) has an opener from a different Tor state, its load is blocked. The content
torbutton/en/design/index.html.en  702) policy also takes similar action to prevent Javascript redirects. This also
torbutton/en/design/index.html.en  703) has the side effect/feature of preventing the user from following any links
torbutton/en/design/index.html.en  704) from a page loaded in an opposite Tor state.
torbutton/en/design/index.html.en  705) 
torbutton/en/design/index.html.en  706) </p><p>
torbutton/en/design/index.html.en  707) This setting is responsible for satisfying the <a class="link" href="#isolation">Network Isolation</a> requirement.
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  708) </p></div><div class="sect3" title="Hook Dangerous Javascript"><div class="titlepage"><div><div><h4 class="title"><a id="jshooks"></a>Hook Dangerous Javascript</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.kill_bad_js</strong></span></p><p>This setting enables injection of the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/jshooks.js" target="_top">Javascript
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  709) hooking code</a>. This is done in the chrome in
torbutton/en/design/index.html.en  710) <code class="function">torbutton_hookdoc()</code>, which is called ultimately by both the 
torbutton/en/design/index.html.en  711) <a class="ulink" href="https://developer.mozilla.org/en/nsIWebProgressListener" target="_top">webprogress
torbutton/en/design/index.html.en  712) listener</a> <span class="command"><strong>torbutton_weblistener</strong></span> and the <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">content policy</a> (the latter being a hack to handle
torbutton/en/design/index.html.en  713) javascript: urls).
torbutton/en/design/index.html.en  714) 
torbutton/en/design/index.html.en  715) In the Firefox 2 days, this option did a lot more than
torbutton/en/design/index.html.en  716) it does now. It used to be responsible for timezone and improved useragent
torbutton/en/design/index.html.en  717) spoofing, and history object cloaking. However, now it only provides
torbutton/en/design/index.html.en  718) obfuscation of the <a class="ulink" href="https://developer.mozilla.org/en/DOM/window.screen" target="_top">window.screen</a>
torbutton/en/design/index.html.en  719) object to mask your browser and desktop resolution.
torbutton/en/design/index.html.en  720) The resolution hooks
torbutton/en/design/index.html.en  721) effectively make the Firefox browser window appear to websites as if the renderable area
torbutton/en/design/index.html.en  722) takes up the entire desktop, has no toolbar or other GUI element space, and
torbutton/en/design/index.html.en  723) the desktop itself has no toolbars.
torbutton/en/design/index.html.en  724) These hooks drastically reduce the amount of information available to do <a class="link" href="#fingerprinting">anonymity set reduction attacks</a> and help to
torbutton/en/design/index.html.en  725) meet the <a class="link" href="#setpreservation">Anonymity Set Preservation</a>
torbutton/en/design/index.html.en  726) requirements. Unfortunately, Gregory Fleischer discovered it is still possible
torbutton/en/design/index.html.en  727) to retrieve the original screen values by using <a class="ulink" href="http://pseudo-flaw.net/tor/torbutton/unmask-sandbox-xpcnativewrapper.html" target="_top">XPCNativeWrapper</a>
torbutton/en/design/index.html.en  728) or <a class="ulink" href="http://pseudo-flaw.net/tor/torbutton/unmask-components-lookupmethod.html" target="_top">Components.lookupMethod</a>.
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  729) We are still looking for a workaround as of Torbutton 1.3.2.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  730) 
torbutton/en/design/index.html.en  731) 
torbutton/en/design/index.html.en  732) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  733) 
torbutton/en/design/index.html.en  734) </p></div><div class="sect3" title="Resize windows to multiples of 50px during Tor usage (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663307"></a>Resize windows to multiples of 50px during Tor usage (recommended)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.resize_windows</strong></span></p><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  735) 
torbutton/en/design/index.html.en  736) This option drastically cuts down on the number of distinct anonymity sets
torbutton/en/design/index.html.en  737) that divide the Tor web userbase. Without this setting, the dimensions for a
torbutton/en/design/index.html.en  738) typical browser window range from 600-1200 horizontal pixels and 400-1000
torbutton/en/design/index.html.en  739) vertical pixels, or about 600x600 = 360000 different sets. Resizing the
torbutton/en/design/index.html.en  740) browser window to multiples of 50 on each side reduces the number of sets by
torbutton/en/design/index.html.en  741) 50^2, bringing the total number of sets to 144. Of course, the distribution
torbutton/en/design/index.html.en  742) among these sets are not uniform, but scaling by 50 will improve the situation
torbutton/en/design/index.html.en  743) due to this non-uniformity for users in the less common resolutions.
torbutton/en/design/index.html.en  744) Obviously the ideal situation would be to lie entirely about the browser
torbutton/en/design/index.html.en  745) window size, but this will likely cause all sorts of rendering issues, and is
torbutton/en/design/index.html.en  746) also not implementable in a foolproof way from extension land.
torbutton/en/design/index.html.en  747) 
torbutton/en/design/index.html.en  748) </p><p>
torbutton/en/design/index.html.en  749) 
torbutton/en/design/index.html.en  750) The implementation of this setting is spread across a couple of different
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  751) locations in the Torbutton javascript <a class="link" href="#browseroverlay" title="Browser Overlay - torbutton.xul">browser
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  752) overlay</a>. Since resizing minimized windows causes them to be restored,
torbutton/en/design/index.html.en  753) and since maximized windows remember their previous size to the pixel, windows
torbutton/en/design/index.html.en  754) must be resized before every document load (at the time of browser tagging)
torbutton/en/design/index.html.en  755) via <code class="function">torbutton_check_round()</code>, called by
torbutton/en/design/index.html.en  756) <code class="function">torbutton_update_tags()</code>. To prevent drift, the extension
torbutton/en/design/index.html.en  757) tracks the original values of the windows and uses this to perform the
torbutton/en/design/index.html.en  758) rounding on document load. In addition, to prevent the user from resizing a
torbutton/en/design/index.html.en  759) window to a non-50px multiple, a resize listener
torbutton/en/design/index.html.en  760) (<code class="function">torbutton_do_resize()</code>) is installed on every new browser
torbutton/en/design/index.html.en  761) window to record the new size and round it to a 50px multiple while Tor is
torbutton/en/design/index.html.en  762) enabled. In all cases, the browser's contentWindow.innerWidth and innerHeight
torbutton/en/design/index.html.en  763) are set. This ensures that there is no discrepancy between the 50 pixel cutoff
torbutton/en/design/index.html.en  764) and the actual renderable area of the browser (so that it is not possible to
torbutton/en/design/index.html.en  765) infer toolbar size/presence by the distance to the nearest 50 pixel roundoff).
torbutton/en/design/index.html.en  766) 
torbutton/en/design/index.html.en  767) </p><p>
torbutton/en/design/index.html.en  768) This setting helps to meet the <a class="link" href="#setpreservation">Anonymity Set Preservation</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  769) </p></div><div class="sect3" title="Disable Search Suggestions during Tor (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663391"></a>Disable Search Suggestions during Tor (recommended)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.no_search</strong></span></p><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  770) This setting causes Torbutton to disable <a class="ulink" href="http://kb.mozillazine.org/Browser.search.suggest.enabled" target="_top"><span class="command"><strong>browser.search.suggest.enabled</strong></span></a>
torbutton/en/design/index.html.en  771) during Tor usage.
torbutton/en/design/index.html.en  772) This governs if you get Google search suggestions during Tor
torbutton/en/design/index.html.en  773) usage. Your Google cookie is transmitted with google search suggestions, hence
torbutton/en/design/index.html.en  774) this is recommended to be disabled.
torbutton/en/design/index.html.en  775) 
torbutton/en/design/index.html.en  776) </p><p>
torbutton/en/design/index.html.en  777) While this setting doesn't satisfy any Torbutton requirements, the fact that
torbutton/en/design/index.html.en  778) cookies are transmitted for partially typed queries does not seem desirable
torbutton/en/design/index.html.en  779) for Tor usage.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  780) </p></div><div class="sect3" title="Disable Updates During Tor"><div class="titlepage"><div><div><h4 class="title"><a id="id2663430"></a>Disable Updates During Tor</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.no_updates</strong></span></p><p>This setting causes Torbutton to disable the four <a class="ulink" href="http://wiki.mozilla.org/Update:Users/Checking_For_Updates#Preference_Controls_and_State" target="_top">Firefox
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  781) update settings</a> during Tor
torbutton/en/design/index.html.en  782)   usage: <span class="command"><strong>extensions.update.enabled</strong></span>,
torbutton/en/design/index.html.en  783) <span class="command"><strong>app.update.enabled</strong></span>,
torbutton/en/design/index.html.en  784)   <span class="command"><strong>app.update.auto</strong></span>, and
torbutton/en/design/index.html.en  785) <span class="command"><strong>browser.search.update</strong></span>.  These prevent the
torbutton/en/design/index.html.en  786)   browser from updating extensions, checking for Firefox upgrades, and
torbutton/en/design/index.html.en  787)   checking for search plugin updates while Tor is enabled.
torbutton/en/design/index.html.en  788)   </p><p>
torbutton/en/design/index.html.en  789) This setting satisfies the <a class="link" href="#updates">Update Safety</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  790) </p></div><div class="sect3" title="Redirect Torbutton Updates Via Tor (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663492"></a>Redirect Torbutton Updates Via Tor (recommended)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.update_torbutton_via_tor</strong></span></p><p>This setting causes Torbutton to install an
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  791) 
torbutton/en/design/index.html.en  792) <a class="ulink" href="https://developer.mozilla.org/en/nsIProtocolProxyFilter" target="_top">nsIProtocolProxyFilter</a>
torbutton/en/design/index.html.en  793) in order to redirect all version update checks and Torbutton update downloads
torbutton/en/design/index.html.en  794) via Tor, regardless of if Tor is enabled or not. This was done both to address
torbutton/en/design/index.html.en  795) concerns about data retention done by <a class="ulink" href="https://www.addons.mozilla.org" target="_top">addons.mozilla.org</a>, as well as to
torbutton/en/design/index.html.en  796) help censored users meet the <a class="link" href="#undiscoverability">Tor
torbutton/en/design/index.html.en  797) Undiscoverability</a> requirement.
torbutton/en/design/index.html.en  798) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  799)   </p></div><div class="sect3" title="Disable livemarks updates during Tor usage (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663536"></a>Disable livemarks updates during Tor usage (recommended)</h4></div></div></div><p>Option:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  800)    </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.disable_livemarks</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en  801)   </p><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  802) 
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  803) This option causes Torbutton to prevent Firefox from loading <a class="ulink" href="http://www.mozilla.com/firefox/livebookmarks.html" target="_top">Livemarks</a> during
torbutton/en/design/index.html.en  804) Tor usage. Because people often have very personalized Livemarks (such as RSS
torbutton/en/design/index.html.en  805) feeds of Wikipedia articles they maintain, etc). This is accomplished both by
torbutton/en/design/index.html.en  806) <a class="link" href="#livemarks" title="@mozilla.org/browser/livemark-service;2 - components/block-livemarks.js">wrapping the livemark-service component</a> and
torbutton/en/design/index.html.en  807) by calling stopUpdateLivemarks() on the <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/browser/livemark-service;2" target="_top">Livemark
torbutton/en/design/index.html.en  808) service</a> when Tor is enabled.
torbutton/en/design/index.html.en  809) 
torbutton/en/design/index.html.en  810) </p><p>
torbutton/en/design/index.html.en  811) This helps satisfy the <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  812) Isolation</a> and <a class="link" href="#setpreservation">Anonymity Set
torbutton/en/design/index.html.en  813) Preservation</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  814) </p></div><div class="sect3" title="Block Tor/Non-Tor access to network from file:// urls (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663607"></a>Block Tor/Non-Tor access to network from file:// urls (recommended)</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  815)    </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.block_tor_file_net</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.block_nontor_file_net</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en  816)   </p><p>
torbutton/en/design/index.html.en  817) 
torbutton/en/design/index.html.en  818) These settings prevent file urls from performing network operations during the
torbutton/en/design/index.html.en  819) respective Tor states. Firefox 2's implementation of same origin policy allows
torbutton/en/design/index.html.en  820) file urls to read and <a class="ulink" href="http://www.gnucitizen.org/blog/content-disposition-hacking/" target="_top">submit
torbutton/en/design/index.html.en  821) arbitrary files from the local filesystem</a> to arbitrary websites. To
torbutton/en/design/index.html.en  822) make matters worse, the 'Content-Disposition' header can be injected
torbutton/en/design/index.html.en  823) arbitrarily by exit nodes to trick users into running arbitrary html files in
torbutton/en/design/index.html.en  824) the local context. These preferences cause the <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">content policy</a> to block access to any network
torbutton/en/design/index.html.en  825) resources from File urls during the appropriate Tor state.
torbutton/en/design/index.html.en  826) 
torbutton/en/design/index.html.en  827) </p><p>
torbutton/en/design/index.html.en  828) 
torbutton/en/design/index.html.en  829) This preference helps to ensure Tor's <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  830) Isolation</a> requirement, by preventing file urls from executing network
torbutton/en/design/index.html.en  831) operations in opposite Tor states. Also, allowing pages to submit arbitrary
torbutton/en/design/index.html.en  832) files to arbitrary sites just generally seems like a bad idea.
torbutton/en/design/index.html.en  833) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  834) </p></div><div class="sect3" title="Close all Tor/Non-Tor tabs and windows on toggle (optional)"><div class="titlepage"><div><div><h4 class="title"><a id="id2663679"></a>Close all Tor/Non-Tor tabs and windows on toggle (optional)</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  835)    </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.close_nontor</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.close_tor</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en  836)   </p><p>
torbutton/en/design/index.html.en  837) 
torbutton/en/design/index.html.en  838) These settings cause Torbutton to enumerate through all windows and close all
torbutton/en/design/index.html.en  839) tabs in each window for the appropriate Tor state. This code can be found in
torbutton/en/design/index.html.en  840) <code class="function">torbutton_update_status()</code>.  The main reason these settings
torbutton/en/design/index.html.en  841) exist is as a backup mechanism in the event of any Javascript or content policy
torbutton/en/design/index.html.en  842) leaks due to <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=409737" target="_top">Firefox Bug
torbutton/en/design/index.html.en  843) 409737</a>.  Torbutton currently tries to block all Javascript network
torbutton/en/design/index.html.en  844) activity via the content policy, but until that bug is fixed, there is some
torbutton/en/design/index.html.en  845) risk that there are alternate ways to bypass the policy. This option is
torbutton/en/design/index.html.en  846) available as an extra assurance of <a class="link" href="#isolation">Network
torbutton/en/design/index.html.en  847) Isolation</a> for those who would like to be sure that when Tor is toggled
torbutton/en/design/index.html.en  848) all page activity has ceased. It also serves as a potential future workaround
torbutton/en/design/index.html.en  849) in the event a content policy failure is discovered, and provides an additional
torbutton/en/design/index.html.en  850) level of protection for the <a class="link" href="#disk">Disk Avoidance</a>
torbutton/en/design/index.html.en  851) protection so that browser state is not sitting around waiting to be swapped
torbutton/en/design/index.html.en  852) out longer than necessary.
torbutton/en/design/index.html.en  853) 
torbutton/en/design/index.html.en  854) </p><p>
torbutton/en/design/index.html.en  855) While this setting doesn't satisfy any Torbutton requirements, the fact that
torbutton/en/design/index.html.en  856) cookies are transmitted for partially typed queries does not seem desirable
torbutton/en/design/index.html.en  857) for Tor usage.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  858) </p></div></div><div class="sect2" title="5.3. History and Forms Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2705261"></a>5.3. History and Forms Settings</h3></div></div></div><div class="sect3" title="Isolate Access to History navigation to Tor state (crucial)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705267"></a>Isolate Access to History navigation to Tor state (crucial)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.block_js_history</strong></span></p><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  859) This setting determines if Torbutton installs an <a class="ulink" href="http://www.oxymoronical.com/experiments/apidocs/interface/nsISHistoryListener" target="_top">nsISHistoryListener</a>
torbutton/en/design/index.html.en  860) attached to the <a class="ulink" href="http://www.oxymoronical.com/experiments/apidocs/interface/nsISHistory" target="_top">sessionHistory</a> of 
torbutton/en/design/index.html.en  861) of each browser's <a class="ulink" href="https://developer.mozilla.org/en/XUL%3aProperty%3awebNavigation" target="_top">webNavigatator</a>.
torbutton/en/design/index.html.en  862) The nsIShistoryListener is instantiated with a reference to the containing
torbutton/en/design/index.html.en  863) browser window and blocks the back, forward, and reload buttons on the browser
torbutton/en/design/index.html.en  864) navigation bar when Tor is in an opposite state than the one to load the
torbutton/en/design/index.html.en  865) current tab. In addition, Tor clears the session history during a new document
torbutton/en/design/index.html.en  866) load if this setting is enabled. 
torbutton/en/design/index.html.en  867) 
torbutton/en/design/index.html.en  868)   </p><p>
torbutton/en/design/index.html.en  869) 
torbutton/en/design/index.html.en  870) This is marked as a crucial setting in part
torbutton/en/design/index.html.en  871) because Javascript access to the history object is indistinguishable from 
torbutton/en/design/index.html.en  872) user clicks, and because
torbutton/en/design/index.html.en  873) <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=409737" target="_top">Firefox Bug
torbutton/en/design/index.html.en  874) 409737</a> allows javascript to execute in opposite Tor states, javascript
torbutton/en/design/index.html.en  875) can issue reloads after Tor toggle to reveal your original IP. Even without
torbutton/en/design/index.html.en  876) this bug, however, Javascript is still able to access previous pages in your
torbutton/en/design/index.html.en  877) session history that may have been loaded under a different Tor state, to
torbutton/en/design/index.html.en  878) attempt to correlate your activity.
torbutton/en/design/index.html.en  879) 
torbutton/en/design/index.html.en  880)    </p><p>
torbutton/en/design/index.html.en  881) 
torbutton/en/design/index.html.en  882) This setting helps to fulfill Torbutton's <a class="link" href="#state">State
torbutton/en/design/index.html.en  883) Separation</a> and (until Bug 409737 is fixed) <a class="link" href="#isolation">Network Isolation</a>
torbutton/en/design/index.html.en  884) requirements.
torbutton/en/design/index.html.en  885) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  886)    </p></div><div class="sect3" title="History Access Settings"><div class="titlepage"><div><div><h4 class="title"><a id="id2705344"></a>History Access Settings</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  887)   </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.block_thread</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.block_nthread</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.block_thwrite</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.block_nthwrite</strong></span></td></tr></table><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  888)   </p><p>On Firefox 3.x, these four settings govern the behavior of the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/ignore-history.js" target="_top">components/ignore-history.js</a>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  889) history blocker component mentioned above. By hooking the browser's view of
torbutton/en/design/index.html.en  890) the history itself via the <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/browser/global-history;2" target="_top">@mozilla.org/browser/global-history;2</a>
torbutton/en/design/index.html.en  891) and <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/browser/nav-history-service;1" target="_top">@mozilla.org/browser/nav-history-service;1</a>
torbutton/en/design/index.html.en  892) components, this mechanism defeats all document-based <a class="ulink" href="http://whattheinternetknowsaboutyou.com/" target="_top">history disclosure
torbutton/en/design/index.html.en  893) attacks</a>, including <a class="ulink" href="http://ha.ckers.org/weird/CSS-history.cgi" target="_top">CSS-only attacks</a>.
torbutton/en/design/index.html.en  894) 
torbutton/en/design/index.html.en  895) The component also hooks functions involved in writing history to disk via
torbutton/en/design/index.html.en  896) both the <a class="ulink" href="http://developer.mozilla.org/en/docs/Places_migration_guide#History" target="_top">Places
torbutton/en/design/index.html.en  897) Database</a> and the older Firefox 2 mechanisms.
torbutton/en/design/index.html.en  898) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  899) </p><p>
torbutton/en/design/index.html.en  900) On Firefox 4, Mozilla finally <a class="ulink" href="https://developer.mozilla.org/en/CSS/Privacy_and_the_%3avisited_selector" target="_top">addressed
torbutton/en/design/index.html.en  901) these issues</a>, so we can effectively ignore the "read" pair of the
torbutton/en/design/index.html.en  902) above prefs. We then only need to link the write prefs to
torbutton/en/design/index.html.en  903) <span class="command"><strong>places.history.enabled</strong></span>, which disabled writing to the
torbutton/en/design/index.html.en  904) history store while set.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  905) </p><p>
torbutton/en/design/index.html.en  906) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  907) </p></div><div class="sect3" title="Clear History During Tor Toggle (optional)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705472"></a>Clear History During Tor Toggle (optional)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.clear_history</strong></span></p><p>This setting governs if Torbutton calls
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  908) <a class="ulink" href="https://developer.mozilla.org/en/nsIBrowserHistory#removeAllPages.28.29" target="_top">nsIBrowserHistory.removeAllPages</a>
torbutton/en/design/index.html.en  909) and <a class="ulink" href="http://www.oxymoronical.com/experiments/apidocs/interface/nsISHistory" target="_top">nsISHistory.PurgeHistory</a>
torbutton/en/design/index.html.en  910) for each tab on Tor toggle.</p><p>
torbutton/en/design/index.html.en  911) This setting is an optional way to help satisfy the <a class="link" href="#state">State Separation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  912) </p></div><div class="sect3" title="Block Password+Form saving during Tor/Non-Tor"><div class="titlepage"><div><div><h4 class="title"><a id="id2705515"></a>Block Password+Form saving during Tor/Non-Tor</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  913)   </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.block_tforms</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.block_ntforms</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en  914)   </p><p>These settings govern if Torbutton disables
torbutton/en/design/index.html.en  915) <span class="command"><strong>browser.formfill.enable</strong></span>
torbutton/en/design/index.html.en  916) and <span class="command"><strong>signon.rememberSignons</strong></span> during Tor and Non-Tor usage.
torbutton/en/design/index.html.en  917) Since form fields can be read at any time by Javascript, this setting is a lot
torbutton/en/design/index.html.en  918) more important than it seems.
torbutton/en/design/index.html.en  919) </p><p>
torbutton/en/design/index.html.en  920) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  921) </p></div></div><div class="sect2" title="5.4. Cache Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2705577"></a>5.4. Cache Settings</h3></div></div></div><div class="sect3" title="Block Tor disk cache and clear all cache on Tor Toggle"><div class="titlepage"><div><div><h4 class="title"><a id="id2705582"></a>Block Tor disk cache and clear all cache on Tor Toggle</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.clear_cache</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  922)   </p><p>This option causes Torbutton to call <a class="ulink" href="https://developer.mozilla.org/en/nsICacheService#evictEntries.28.29" target="_top">nsICacheService.evictEntries(0)</a>
torbutton/en/design/index.html.en  923) on Tor toggle to remove all entries from the cache. In addition, this setting
torbutton/en/design/index.html.en  924) causes Torbutton to set <a class="ulink" href="http://kb.mozillazine.org/Browser.cache.disk.enable" target="_top">browser.cache.disk.enable</a> to false.
torbutton/en/design/index.html.en  925) </p><p>
torbutton/en/design/index.html.en  926) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  927) </p></div><div class="sect3" title="Block disk and memory cache during Tor"><div class="titlepage"><div><div><h4 class="title"><a id="id2705632"></a>Block disk and memory cache during Tor</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.block_cache</strong></span></p><p>This setting
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  928) causes Torbutton to set <a class="ulink" href="http://kb.mozillazine.org/Browser.cache.memory.enable" target="_top">browser.cache.memory.enable</a>,
torbutton/en/design/index.html.en  929) <a class="ulink" href="http://kb.mozillazine.org/Browser.cache.disk.enable" target="_top">browser.cache.disk.enable</a> and
torbutton/en/design/index.html.en  930) <a class="ulink" href="http://kb.mozillazine.org/Network.http.use-cache" target="_top">network.http.use-cache</a> to false during tor usage.
torbutton/en/design/index.html.en  931) </p><p>
torbutton/en/design/index.html.en  932) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  933) </p></div></div><div class="sect2" title="5.5. Cookie and Auth Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2705686"></a>5.5. Cookie and Auth Settings</h3></div></div></div><div class="sect3" title="Clear Cookies on Tor Toggle"><div class="titlepage"><div><div><h4 class="title"><a id="id2705691"></a>Clear Cookies on Tor Toggle</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.clear_cookies</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  934)   </p><p>
torbutton/en/design/index.html.en  935) 
torbutton/en/design/index.html.en  936) This setting causes Torbutton to call <a class="ulink" href="https://developer.mozilla.org/en/nsICookieManager#removeAll.28.29" target="_top">nsICookieManager.removeAll()</a> on
torbutton/en/design/index.html.en  937) every Tor toggle. In addition, this sets <a class="ulink" href="http://kb.mozillazine.org/Network.cookie.lifetimePolicy" target="_top">network.cookie.lifetimePolicy</a>
torbutton/en/design/index.html.en  938) to 2 for Tor usage, which causes all cookies to be demoted to session cookies,
torbutton/en/design/index.html.en  939) which prevents them from being written to disk. 
torbutton/en/design/index.html.en  940) 
torbutton/en/design/index.html.en  941) </p><p>
torbutton/en/design/index.html.en  942) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  943) </p></div><div class="sect3" title="Store Non-Tor cookies in a protected jar"><div class="titlepage"><div><div><h4 class="title"><a id="id2705742"></a>Store Non-Tor cookies in a protected jar</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.cookie_jars</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  944)   </p><p>
torbutton/en/design/index.html.en  945) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  946) This setting causes Torbutton to use <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cookie-jar-selector.js" target="_top">@torproject.org/cookie-jar-selector;2</a> to store
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  947) non-tor cookies in a cookie jar during Tor usage, and clear the Tor cookies
torbutton/en/design/index.html.en  948) before restoring the jar.
torbutton/en/design/index.html.en  949) </p><p>
torbutton/en/design/index.html.en  950) This setting also sets <a class="ulink" href="http://kb.mozillazine.org/Network.cookie.lifetimePolicy" target="_top">network.cookie.lifetimePolicy</a>
torbutton/en/design/index.html.en  951) to 2 for Tor usage, which causes all cookies to be demoted to session cookies,
torbutton/en/design/index.html.en  952) which prevents them from being written to disk. 
torbutton/en/design/index.html.en  953) 
torbutton/en/design/index.html.en  954) </p><p>
torbutton/en/design/index.html.en  955) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> and <a class="link" href="#disk">Disk Avoidance</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  956) </p></div><div class="sect3" title="Store both Non-Tor and Tor cookies in a protected jar (dangerous)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705799"></a>Store both Non-Tor and Tor cookies in a protected jar (dangerous)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.dual_cookie_jars</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  957)   </p><p>
torbutton/en/design/index.html.en  958) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  959) This setting causes Torbutton to use <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cookie-jar-selector.js" target="_top">@torproject.org/cookie-jar-selector;2</a> to store
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  960) both Tor and Non-Tor cookies into protected jars.
torbutton/en/design/index.html.en  961) </p><p>
torbutton/en/design/index.html.en  962) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  963) </p></div><div class="sect3" title="Manage My Own Cookies (dangerous)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705841"></a>Manage My Own Cookies (dangerous)</h4></div></div></div><p>Options: None</p><p>This setting disables all Torbutton cookie handling by setting the above
torbutton/en/design/index.html.en  964) cookie prefs all to false.</p></div><div class="sect3" title="Disable DOM Storage during Tor usage (crucial)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705856"></a>Disable DOM Storage during Tor usage (crucial)</h4></div></div></div><div class="sect3" title="Do not write Tor/Non-Tor cookies to disk"><div class="titlepage"><div><div><h4 class="title"><a id="id2705859"></a>Do not write Tor/Non-Tor cookies to disk</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  965)   </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.tor_memory_jar</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.nontor_memory_jar</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en  966)   </p><p>
torbutton/en/design/index.html.en  967) These settings (contributed by arno) cause Torbutton to set <a class="ulink" href="http://kb.mozillazine.org/Network.cookie.lifetimePolicy" target="_top">network.cookie.lifetimePolicy</a>
torbutton/en/design/index.html.en  968) to 2 during the appropriate Tor state, and to store cookies acquired in that
torbutton/en/design/index.html.en  969) state into a Javascript
torbutton/en/design/index.html.en  970) <a class="ulink" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Processing_XML_with_E4X" target="_top">E4X</a>
torbutton/en/design/index.html.en  971) object as opposed to writing them to disk.
torbutton/en/design/index.html.en  972) </p><p>
torbutton/en/design/index.html.en  973) This allows Torbutton to provide an option to preserve a user's 
torbutton/en/design/index.html.en  974) cookies while still satisfying the <a class="link" href="#disk">Disk Avoidance</a>
torbutton/en/design/index.html.en  975) requirement.
torbutton/en/design/index.html.en  976) </p></div><p>Option: <span class="command"><strong>extensions.torbutton.disable_domstorage</strong></span>
torbutton/en/design/index.html.en  977)   </p><p>
torbutton/en/design/index.html.en  978) 
torbutton/en/design/index.html.en  979) This setting causes Torbutton to toggle <span class="command"><strong>dom.storage.enabled</strong></span> during Tor
torbutton/en/design/index.html.en  980) usage to prevent 
torbutton/en/design/index.html.en  981) <a class="ulink" href="http://developer.mozilla.org/en/docs/DOM:Storage" target="_top">DOM Storage</a> from
torbutton/en/design/index.html.en  982)   being used to store persistent information across Tor states.</p><p>
torbutton/en/design/index.html.en  983) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  984) </p></div><div class="sect3" title="Clear HTTP Auth on Tor Toggle (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2705960"></a>Clear HTTP Auth on Tor Toggle (recommended)</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.clear_http_auth</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  985)   </p><p>
torbutton/en/design/index.html.en  986) This setting causes Torbutton to call <a class="ulink" href="http://www.oxymoronical.com/experiments/apidocs/interface/nsIHttpAuthManager" target="_top">nsIHttpAuthManager.clearAll()</a>
torbutton/en/design/index.html.en  987) every time Tor is toggled.
torbutton/en/design/index.html.en  988) </p><p>
torbutton/en/design/index.html.en  989) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  990) </p></div></div><div class="sect2" title="5.6. Startup Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2705999"></a>5.6. Startup Settings</h3></div></div></div><div class="sect3" title="On Browser Startup, set Tor state to: Tor, Non-Tor"><div class="titlepage"><div><div><h4 class="title"><a id="id2706004"></a>On Browser Startup, set Tor state to: Tor, Non-Tor</h4></div></div></div><p>Options:
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en  991)    <span class="command"><strong>extensions.torbutton.restore_tor</strong></span>
torbutton/en/design/index.html.en  992)   </p><p>This option governs what Tor state tor is loaded in to.
torbutton/en/design/index.html.en  993) <code class="function">torbutton_set_initial_state()</code> covers the case where the
torbutton/en/design/index.html.en  994) browser did not crash, and <code class="function">torbutton_crash_recover()</code>
torbutton/en/design/index.html.en  995) covers the case where the <a class="link" href="#crashobserver" title="@torproject.org/crash-observer;1">crash observer</a>
torbutton/en/design/index.html.en  996) detected a crash.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en  997) </p><p>
torbutton/en/design/index.html.en  998) 
torbutton/en/design/index.html.en  999) Since the Tor state after a Firefox crash is unknown/indeterminate, this
torbutton/en/design/index.html.en 1000) setting helps to satisfy the <a class="link" href="#state">State Separation</a>
torbutton/en/design/index.html.en 1001) requirement in the event of Firefox crashes by ensuring all cookies,
torbutton/en/design/index.html.en 1002) settings and saved sessions are reloaded from a fixed Tor state.
torbutton/en/design/index.html.en 1003)  
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1004) </p></div><div class="sect3" title="Prevent session store from saving Non-Tor/Tor-loaded tabs"><div class="titlepage"><div><div><h4 class="title"><a id="id2706055"></a>Prevent session store from saving Non-Tor/Tor-loaded tabs</h4></div></div></div><p>Options: 
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1005)   </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.nonontor_sessionstore</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.notor_sessionstore</strong></span></td></tr></table><p>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1006)   </p><p>If these options are enabled, the <a class="link" href="#tbsessionstore" title="@torproject.org/torbutton-ss-blocker;1">tbSessionStore.js</a> component uses the session
torbutton/en/design/index.html.en 1007) store listeners to filter out the appropriate tabs before writing the session
torbutton/en/design/index.html.en 1008) store data to disk.
torbutton/en/design/index.html.en 1009) </p><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1010) This setting helps to satisfy the <a class="link" href="#disk">Disk Avoidance</a>
torbutton/en/design/index.html.en 1011) requirement, and also helps to satisfy the <a class="link" href="#state">State Separation</a> requirement in the event of Firefox
torbutton/en/design/index.html.en 1012) crashes.
torbutton/en/design/index.html.en 1013) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1014) </p></div></div><div class="sect2" title="5.7. Shutdown Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2706113"></a>5.7. Shutdown Settings</h3></div></div></div><div class="sect3" title="Clear cookies on Tor/Non-Tor shutdown"><div class="titlepage"><div><div><h4 class="title"><a id="id2706119"></a>Clear cookies on Tor/Non-Tor shutdown</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.shutdown_method</strong></span>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1015)   </p><p> This option variable can actually take 3 values: 0, 1, and 2. 0 means no
torbutton/en/design/index.html.en 1016) cookie clearing, 1 means clear only during Tor-enabled shutdown, and 2 means
torbutton/en/design/index.html.en 1017) clear for both Tor and Non-Tor shutdown. When set to 1 or 2, Torbutton listens
torbutton/en/design/index.html.en 1018) for the <a class="ulink" href="http://developer.mozilla.org/en/docs/Observer_Notifications#Application_shutdown" target="_top">quit-application-granted</a> event in
torbutton/en/design/index.html.en 1019) <a class="link" href="#crashobserver" title="@torproject.org/crash-observer;1">crash-observer.js</a> and use <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/cookie-jar-selector.js" target="_top">@torproject.org/cookie-jar-selector;2</a>
torbutton/en/design/index.html.en 1020) to clear out all cookies and all cookie jars upon shutdown.
torbutton/en/design/index.html.en 1021) </p><p>
torbutton/en/design/index.html.en 1022) This setting helps to satisfy the <a class="link" href="#state">State Separation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1023) </p></div></div><div class="sect2" title="5.8. Header Settings"><div class="titlepage"><div><div><h3 class="title"><a id="id2706173"></a>5.8. Header Settings</h3></div></div></div><div class="sect3" title="Set user agent during Tor usage (crucial)"><div class="titlepage"><div><div><h4 class="title"><a id="id2706179"></a>Set user agent during Tor usage (crucial)</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1024)    </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.set_uagent</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.platform_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.oscpu_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.buildID_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.productsub_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.appname_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.appversion_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.useragent_override</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.useragent_vendor</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.useragent_vendorSub</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en 1025)    </p><p>On face, user agent switching appears to be straight-forward in Firefox.
torbutton/en/design/index.html.en 1026) It provides several options for controlling the browser user agent string:
torbutton/en/design/index.html.en 1027) <span class="command"><strong>general.appname.override</strong></span>,
torbutton/en/design/index.html.en 1028) <span class="command"><strong>general.appversion.override</strong></span>,
torbutton/en/design/index.html.en 1029) <span class="command"><strong>general.platform.override</strong></span>,
torbutton/en/design/index.html.en 1030) <span class="command"><strong>general.oscpu.override</strong></span>,
torbutton/en/design/index.html.en 1031) <span class="command"><strong>general.productSub.override</strong></span>,
torbutton/en/design/index.html.en 1032) <span class="command"><strong>general.buildID.override</strong></span>,
torbutton/en/design/index.html.en 1033) <span class="command"><strong>general.useragent.override</strong></span>,
torbutton/en/design/index.html.en 1034) <span class="command"><strong>general.useragent.vendor</strong></span>, and
torbutton/en/design/index.html.en 1035) <span class="command"><strong>general.useragent.vendorSub</strong></span>. If
torbutton/en/design/index.html.en 1036) the Torbutton preference <span class="command"><strong>extensions.torbutton.set_uagent</strong></span> is
torbutton/en/design/index.html.en 1037) true, Torbutton copies all of the other above prefs into their corresponding
torbutton/en/design/index.html.en 1038) browser preferences during Tor usage.</p><p>
torbutton/en/design/index.html.en 1039) 
torbutton/en/design/index.html.en 1040) It also turns out that it is possible to detect the original Firefox version
torbutton/en/design/index.html.en 1041) by <a class="ulink" href="http://ha.ckers.org/blog/20070516/read-firefox-settings-poc/" target="_top">inspecting
torbutton/en/design/index.html.en 1042) certain resource:// files</a>. These cases are handled by Torbutton's
torbutton/en/design/index.html.en 1043) <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">content policy</a>.
torbutton/en/design/index.html.en 1044) 
torbutton/en/design/index.html.en 1045) </p><p>
torbutton/en/design/index.html.en 1046) This setting helps to satisfy the <a class="link" href="#setpreservation">Anonymity Set Preservation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1047) </p></div><div class="sect3" title="Spoof US English Browser"><div class="titlepage"><div><div><h4 class="title"><a id="id2706353"></a>Spoof US English Browser</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1048) </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.spoof_english</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.spoof_charset</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.spoof_language</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en 1049) </p><p> This option causes Torbutton to set
torbutton/en/design/index.html.en 1050) <span class="command"><strong>general.useragent.locale</strong></span>
torbutton/en/design/index.html.en 1051) <span class="command"><strong>intl.accept_languages</strong></span> to the value specified in
torbutton/en/design/index.html.en 1052) <span class="command"><strong>extensions.torbutton.spoof_locale</strong></span>,
torbutton/en/design/index.html.en 1053) <span class="command"><strong>extensions.torbutton.spoof_charset</strong></span> and
torbutton/en/design/index.html.en 1054) <span class="command"><strong>extensions.torbutton.spoof_language</strong></span> during Tor usage, as
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1055) well as hooking <span class="command"><strong>navigator.language</strong></span> via its <a class="link" href="#jshooks" title="Hook Dangerous Javascript">javascript hooks</a>.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1056)  </p><p>
torbutton/en/design/index.html.en 1057) This setting helps to satisfy the <a class="link" href="#setpreservation">Anonymity Set Preservation</a> and <a class="link" href="#location">Location Neutrality</a> requirements.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1058) </p></div><div class="sect3" title="Referer Spoofing Options"><div class="titlepage"><div><div><h4 class="title"><a id="id2706446"></a>Referer Spoofing Options</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.refererspoof</strong></span>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1059) </p><p>
torbutton/en/design/index.html.en 1060) This option variable has three values. If it is 0, "smart" referer spoofing is
torbutton/en/design/index.html.en 1061) enabled. If it is 1, the referer behaves as normal. If it is 2, no referer is
torbutton/en/design/index.html.en 1062) sent. The default value is 1. The smart referer spoofing is implemented by the
torbutton/en/design/index.html.en 1063) <a class="link" href="#refspoofer" title="@torproject.org/torRefSpoofer;1">torRefSpoofer</a> component.
torbutton/en/design/index.html.en 1064) 
torbutton/en/design/index.html.en 1065) </p><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1066) This setting also does not directly satisfy any Torbutton requirement, but
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1067) some may desire to mask their referer for general privacy concerns.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1068) </p></div><div class="sect3" title="Strip platform and language off of Google Search Box queries"><div class="titlepage"><div><div><h4 class="title"><a id="id2706480"></a>Strip platform and language off of Google Search Box queries</h4></div></div></div><p>Option: <span class="command"><strong>extensions.torbutton.fix_google_srch</strong></span>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1069) </p><p> 
torbutton/en/design/index.html.en 1070) 
torbutton/en/design/index.html.en 1071) This option causes Torbutton to use the <a class="ulink" href="https://wiki.mozilla.org/Search_Service:API" target="_top">@mozilla.org/browser/search-service;1</a>
torbutton/en/design/index.html.en 1072) component to wrap the Google search plugin. On many platforms, notably Debian
torbutton/en/design/index.html.en 1073) and Ubuntu, the Google search plugin is set to reveal a lot of language and
torbutton/en/design/index.html.en 1074) platform information. This setting strips off that info while Tor is enabled.
torbutton/en/design/index.html.en 1075) 
torbutton/en/design/index.html.en 1076) </p><p>
torbutton/en/design/index.html.en 1077) This setting helps Torbutton to fulfill its <a class="link" href="#setpreservation">Anonymity Set Preservation</a> requirement.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1078) </p></div><div class="sect3" title="Automatically use an alternate search engine when presented with a Google Captcha"><div class="titlepage"><div><div><h4 class="title"><a id="id2706521"></a>Automatically use an alternate search engine when presented with a
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1079) Google Captcha</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1080) </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.asked_google_captcha</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.dodge_google_captcha</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.google_redir_url</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en 1081) </p><p>
torbutton/en/design/index.html.en 1082) 
torbutton/en/design/index.html.en 1083) Google's search engine has rate limiting features that cause it to
torbutton/en/design/index.html.en 1084) <a class="ulink" href="http://googleonlinesecurity.blogspot.com/2007/07/reason-behind-were-sorry-message.html" target="_top">present
torbutton/en/design/index.html.en 1085) captchas</a> and sometimes even outright ban IPs that issue large numbers
torbutton/en/design/index.html.en 1086) of search queries, especially if a lot of these queries appear to be searching
torbutton/en/design/index.html.en 1087) for software vulnerabilities or unprotected comment areas.
torbutton/en/design/index.html.en 1088) 
torbutton/en/design/index.html.en 1089) </p><p>
torbutton/en/design/index.html.en 1090) 
torbutton/en/design/index.html.en 1091) Despite multiple discussions with Google, we were unable to come to a solution
torbutton/en/design/index.html.en 1092) or any form of compromise that would reduce the number of captchas and
torbutton/en/design/index.html.en 1093) outright bans seen by Tor users issuing regular queries.
torbutton/en/design/index.html.en 1094) 
torbutton/en/design/index.html.en 1095) </p><p>
torbutton/en/design/index.html.en 1096) As a result, we've implemented this option as an <a class="ulink" href="https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads#HTTP_Observers" target="_top">'http-on-modify-request'</a>
torbutton/en/design/index.html.en 1097) http observer to optionally redirect banned or captcha-triggering Google
torbutton/en/design/index.html.en 1098) queries to search engines that do not rate limit Tor users. The current
Mike Perry Update FF bugs in design do...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1099) options are duckduckgo.com, ixquick.com, bing.com, yahoo.com and scroogle.org. These are
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1100) encoded in the preferences
Mike Perry Update FF bugs in design do...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1101) <span class="command"><strong>extensions.torbutton.redir_url.[1-5]</strong></span>.
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1102) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1103) </p></div><div class="sect3" title="Store SSL/CA Certs in separate jars for Tor/Non-Tor (recommended)"><div class="titlepage"><div><div><h4 class="title"><a id="id2706601"></a>Store SSL/CA Certs in separate jars for Tor/Non-Tor (recommended)</h4></div></div></div><p>Options:
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1104) </p><table border="0" summary="Simple list" class="simplelist"><tr><td><span class="command"><strong>extensions.torbutton.jar_certs</strong></span></td></tr><tr><td><span class="command"><strong>extensions.torbutton.jar_ca_certs</strong></span></td></tr></table><p>
torbutton/en/design/index.html.en 1105) </p><p>
torbutton/en/design/index.html.en 1106) 
torbutton/en/design/index.html.en 1107) These settings govern if Torbutton attempts to isolate the user's SSL
torbutton/en/design/index.html.en 1108) certificates into separate jars for each Tor state. This isolation is
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1109) implemented in <code class="function">torbutton_jar_certs()</code> in <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/chrome/content/torbutton.js" target="_top">chrome/content/torbutton.js</a>,
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1110) which calls <code class="function">torbutton_jar_cert_type()</code> and
torbutton/en/design/index.html.en 1111) <code class="function">torbutton_unjar_cert_type()</code> for each certificate type in
torbutton/en/design/index.html.en 1112) the <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/security/nsscertcache;1" target="_top">@mozilla.org/security/nsscertcache;1</a>.
torbutton/en/design/index.html.en 1113) Certificates are deleted from and imported to the <a class="ulink" href="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/components/%40mozilla.org/security/x509certdb;1" target="_top">@mozilla.org/security/x509certdb;1</a>.
torbutton/en/design/index.html.en 1114) </p><p>
torbutton/en/design/index.html.en 1115) The first time this pref is used, a backup of the user's certificates is
torbutton/en/design/index.html.en 1116) created in their profile directory under the name
torbutton/en/design/index.html.en 1117) <code class="filename">cert8.db.bak</code>. This file can be copied back to
torbutton/en/design/index.html.en 1118) <code class="filename">cert8.db</code> to fully restore the original state of the
torbutton/en/design/index.html.en 1119) user's certificates in the event of any error.
torbutton/en/design/index.html.en 1120) </p><p>
torbutton/en/design/index.html.en 1121) Since exit nodes and malicious sites can insert content elements sourced to
torbutton/en/design/index.html.en 1122) specific SSL sites to query if a user has a certain certificate,
torbutton/en/design/index.html.en 1123) this setting helps to satisfy the <a class="link" href="#state">State
torbutton/en/design/index.html.en 1124) Separation</a> requirement of Torbutton. Unfortunately, <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=435159" target="_top">Firefox Bug
torbutton/en/design/index.html.en 1125) 435159</a> prevents it from functioning correctly in the event of rapid Tor toggle, so it
torbutton/en/design/index.html.en 1126) is currently not exposed via the preferences UI.
torbutton/en/design/index.html.en 1127) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1128) </p></div></div></div><div class="sect1" title="6. Relevant Firefox Bugs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="FirefoxBugs"></a>6. Relevant Firefox Bugs</h2></div></div></div><p>
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1129) Future releases of Torbutton are going to be designed around supporting only
torbutton/en/design/index.html.en 1130) <a class="ulink" href="https://www.torproject.org/projects/torbrowser.html.en" target="_top">Tor
torbutton/en/design/index.html.en 1131) Browser Bundle</a>, which greatly simplifies the number and nature of Firefox
torbutton/en/design/index.html.en 1132) bugs we must fix. This allows us to abandon the complexities of <a class="link" href="#state">State
torbutton/en/design/index.html.en 1133) Separation</a> and <a class="link" href="#isolation">Network Isolation</a> requirements
torbutton/en/design/index.html.en 1134) associated with the Toggle Model.
torbutton/en/design/index.html.en 1135)   </p><div class="sect2" title="6.1. Tor Browser Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="TorBrowserBugs"></a>6.1. Tor Browser Bugs</h3></div></div></div><p>
torbutton/en/design/index.html.en 1136) The list of Firefox patches we must create to improve privacy on the
torbutton/en/design/index.html.en 1137) Tor Browser Bundle are collected in the Tor Bug Tracker under <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/2871" target="_top">ticket
torbutton/en/design/index.html.en 1138) #2871</a>. These bugs are also applicable to the Toggle Model, and
torbutton/en/design/index.html.en 1139) should be considered higher priority than all Toggle Model specific bugs
torbutton/en/design/index.html.en 1140) below.
torbutton/en/design/index.html.en 1141)    </p></div><div class="sect2" title="6.2. Toggle Model Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="ToggleModelBugs"></a>6.2. Toggle Model Bugs</h3></div></div></div><p>
torbutton/en/design/index.html.en 1142) In addition to the Tor Browser bugs, the Torbutton Toggle Model suffers from
torbutton/en/design/index.html.en 1143) additional bugs specific to the need to isolate state across the toggle.
torbutton/en/design/index.html.en 1144) Toggle model bugs are considered a lower priority than the bugs against the
torbutton/en/design/index.html.en 1145) Tor Browser model.
torbutton/en/design/index.html.en 1146)    </p><div class="sect3" title="Bugs impacting security"><div class="titlepage"><div><div><h4 class="title"><a id="FirefoxSecurity"></a>Bugs impacting security</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1147) 
torbutton/en/design/index.html.en 1148) Torbutton has to work around a number of Firefox bugs that impact its
torbutton/en/design/index.html.en 1149) security. Most of these are mentioned elsewhere in this document, but they
torbutton/en/design/index.html.en 1150) have also been gathered here for reference. In order of decreasing severity,
torbutton/en/design/index.html.en 1151) they are:
torbutton/en/design/index.html.en 1152) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1153)    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=435159" target="_top">Bug 435159 -
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1154) nsNSSCertificateDB::DeleteCertificate has race conditions</a><p>
torbutton/en/design/index.html.en 1155) 
torbutton/en/design/index.html.en 1156) In Torbutton 1.2.0rc1, code was added to attempt to isolate SSL certificates
torbutton/en/design/index.html.en 1157) the user has installed. Unfortunately, the method call to delete a certificate
torbutton/en/design/index.html.en 1158) from the current certificate database acts lazily: it only sets a variable
torbutton/en/design/index.html.en 1159) that marks a cert for deletion later, and it is not cleared if that
torbutton/en/design/index.html.en 1160) certificate is re-added. This means that if the Tor state is toggled quickly,
torbutton/en/design/index.html.en 1161) that certificate could remain present until it is re-inserted (causing an
torbutton/en/design/index.html.en 1162) error dialog), and worse, it would still be deleted after that.  The lack of
torbutton/en/design/index.html.en 1163) this functionality is considered a Torbutton security bug because cert
torbutton/en/design/index.html.en 1164) isolation is considered a <a class="link" href="#state">State Separation</a>
torbutton/en/design/index.html.en 1165) feature.
torbutton/en/design/index.html.en 1166) 
Mike Perry Update design html.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1167)       </p></li><li class="listitem">Give more visibility into and control over TLS
torbutton/en/design/index.html.en 1168) negotiation
torbutton/en/design/index.html.en 1169)      <p>
torbutton/en/design/index.html.en 1170) 
torbutton/en/design/index.html.en 1171) There are several <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/2482" target="_top">TLS issues
torbutton/en/design/index.html.en 1172) impacting Torbutton security</a>. It is not clear if these should be one
torbutton/en/design/index.html.en 1173) Firefox bug or several, but in particular we need better control over various
torbutton/en/design/index.html.en 1174) aspects of TLS connections. Firefox currently provides no observer capable of
torbutton/en/design/index.html.en 1175) extracting TLS parameters or certificates early enough to cancel a TLS
torbutton/en/design/index.html.en 1176) request. We would like to be able to provide <a class="ulink" href="https://www.eff.org/https-everywhere" target="_top">HTTPS-Everywhere</a> users with
torbutton/en/design/index.html.en 1177) the ability to <a class="ulink" href="https://trac.torproject.org/projects/tor/wiki/HTTPSEverywhere/SSLObservatorySubmission" target="_top">have
torbutton/en/design/index.html.en 1178) their certificates audited</a> by a <a class="ulink" href="http://www.networknotary.org/" target="_top">Perspectives</a>-style set of
torbutton/en/design/index.html.en 1179) notaries. The problem with this is that the API observer points do not exist
torbutton/en/design/index.html.en 1180) for any Firefox addon to actually block authentication token submission over a
torbutton/en/design/index.html.en 1181) TLS channel, so every addon to date (including Perspectives) is actually
torbutton/en/design/index.html.en 1182) providing users with notification *after* their authentication tokens have
torbutton/en/design/index.html.en 1183) already been compromised. This obviously needs to be fixed.
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1184)      </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=122752" target="_top">Bug 122752 - SOCKS
Mike Perry Update FF bugs in design do...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1185) Username/Password Support</a><p>
torbutton/en/design/index.html.en 1186) We need <a class="ulink" href="https://developer.mozilla.org/en/nsIProxyInfo" target="_top">Firefox
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1187) APIs</a> or about:config settings to control the SOCKS Username and
Mike Perry Update FF bugs in design do...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1188) Password fields. The reason why we need this support is to utilize an (as yet
torbutton/en/design/index.html.en 1189) unimplemented) scheme to separate Tor traffic based <a class="ulink" href="https://gitweb.torproject.org/torspec.git/blob_plain/HEAD:/proposals/171-separate-streams.txt" target="_top">on
torbutton/en/design/index.html.en 1190) SOCKS username/password</a>.
torbutton/en/design/index.html.en 1191)     </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=409737" target="_top">Bug 409737 -
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1192) javascript.enabled and docShell.allowJavascript do not disable all event
torbutton/en/design/index.html.en 1193) handlers</a><p>
torbutton/en/design/index.html.en 1194) 
torbutton/en/design/index.html.en 1195) This bug allows pages to execute javascript via addEventListener and perhaps
torbutton/en/design/index.html.en 1196) other callbacks. In order to prevent this bug from enabling an attacker to
torbutton/en/design/index.html.en 1197) break the <a class="link" href="#isolation">Network Isolation</a> requirement,
torbutton/en/design/index.html.en 1198) Torbutton 1.1.13 began blocking popups and history manipulation from different
torbutton/en/design/index.html.en 1199) Tor states.  So long as there are no ways to open popups or redirect the user
torbutton/en/design/index.html.en 1200) to a new page, the <a class="link" href="#contentpolicy" title="@torproject.org/cssblocker;1 - components/cssblocker.js">Torbutton content
torbutton/en/design/index.html.en 1201) policy</a> should block Javascript network access. However, if there are
torbutton/en/design/index.html.en 1202) ways to open popups or perform redirects such that Torbutton cannot block
torbutton/en/design/index.html.en 1203) them, pages may still have free reign to break that requirement and reveal a
torbutton/en/design/index.html.en 1204) user's original IP address.
torbutton/en/design/index.html.en 1205) 
torbutton/en/design/index.html.en 1206)      </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=448743" target="_top">Bug 448743 -
torbutton/en/design/index.html.en 1207) Decouple general.useragent.locale from spoofing of navigator.language</a><p>
torbutton/en/design/index.html.en 1208) 
torbutton/en/design/index.html.en 1209) Currently, Torbutton spoofs the <span class="command"><strong>navigator.language</strong></span>
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1210) attribute via <a class="link" href="#jshooks" title="Hook Dangerous Javascript">Javascript hooks</a>. Unfortunately,
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1211) these do not work on Firefox 3. It would be ideal to have
torbutton/en/design/index.html.en 1212) a pref to set this value (something like a
torbutton/en/design/index.html.en 1213) <span class="command"><strong>general.useragent.override.locale</strong></span>),
torbutton/en/design/index.html.en 1214) to avoid fragmenting the anonymity set of users of foreign locales. This issue
torbutton/en/design/index.html.en 1215) impedes Torbutton from fully meeting its <a class="link" href="#setpreservation">Anonymity Set Preservation</a>
torbutton/en/design/index.html.en 1216) requirement on Firefox 3.
torbutton/en/design/index.html.en 1217) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1218)      </p></li></ol></div></div><div class="sect3" title="Bugs blocking functionality"><div class="titlepage"><div><div><h4 class="title"><a id="FirefoxWishlist"></a>Bugs blocking functionality</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1219) The following bugs impact Torbutton and similar extensions' functionality.
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1220)    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=629820" target="_top">Bug 629820 - nsIContentPolicy::shouldLoad not
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1221) called for web request in Firefox Mobile</a><p>
torbutton/en/design/index.html.en 1222) 
torbutton/en/design/index.html.en 1223) The new <a class="ulink" href="https://wiki.mozilla.org/Mobile/Fennec/Extensions/Electrolysis" target="_top">Electrolysis</a>
torbutton/en/design/index.html.en 1224) multiprocess system appears to have some pretty rough edge cases with respect
torbutton/en/design/index.html.en 1225) to registering XPCOM category managers such as the nsIContentPolicy, which
torbutton/en/design/index.html.en 1226) make it difficult to do a straight-forward port of Torbutton or
torbutton/en/design/index.html.en 1227) HTTPS-Everywhere to Firefox Mobile.  It probably also has similar issues with
torbutton/en/design/index.html.en 1228) wrapping existing <a class="link" href="#hookedxpcom" title="2.1. Hooked Components">Firefox XPCOM components</a>,
torbutton/en/design/index.html.en 1229) which will also cause more problems for porting Torbutton.
torbutton/en/design/index.html.en 1230) 
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1231)     </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=417869" target="_top">Bug 417869 -
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1232) Browser context is difficult to obtain from many XPCOM callbacks</a><p>
torbutton/en/design/index.html.en 1233) 
torbutton/en/design/index.html.en 1234) It is difficult to determine which tabbrowser many XPCOM callbacks originate
torbutton/en/design/index.html.en 1235) from, and in some cases absolutely no context information is provided at all.
torbutton/en/design/index.html.en 1236) While this doesn't have much of an effect on Torbutton, it does make writing
torbutton/en/design/index.html.en 1237) extensions that would like to do per-tab settings and content filters (such as
torbutton/en/design/index.html.en 1238) FoxyProxy) difficult to impossible to implement securely.
torbutton/en/design/index.html.en 1239) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1240)    </p></li></ol></div></div><div class="sect3" title="Low Priority Bugs"><div class="titlepage"><div><div><h4 class="title"><a id="FirefoxMiscBugs"></a>Low Priority Bugs</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1241) The following bugs have an effect upon Torbutton, but are superseded by more
torbutton/en/design/index.html.en 1242) practical and more easily fixable variant bugs above; or have stable, simple
torbutton/en/design/index.html.en 1243) workarounds.
Mike Perry Update Torbutton design doc.

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1244)   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=440892" target="_top">Bug 440892 -
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1245) network.protocol-handler.warn-external are ignored</a><p>
torbutton/en/design/index.html.en 1246) 
torbutton/en/design/index.html.en 1247) Sometime in the Firefox 3 development cycle, the preferences that governed
torbutton/en/design/index.html.en 1248) warning a user when external apps were launched got disconnected from the code
torbutton/en/design/index.html.en 1249) that does the launching. Torbutton depended on these prefs to prevent websites
torbutton/en/design/index.html.en 1250) from launching specially crafted documents and application arguments that
torbutton/en/design/index.html.en 1251) caused Proxy Bypass. We currently work around this issue by <a class="link" href="#appblocker" title="@mozilla.org/uriloader/external-protocol-service;1 , @mozilla.org/uriloader/external-helper-app-service;1, and @mozilla.org/mime;1 - components/external-app-blocker.js">wrapping the app launching components</a> to present a
torbutton/en/design/index.html.en 1252) popup before launching external apps while Tor is enabled. While this works,
torbutton/en/design/index.html.en 1253) it would be nice if these prefs were either fixed or removed.
torbutton/en/design/index.html.en 1254) 
torbutton/en/design/index.html.en 1255)      </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=437014" target="_top">Bug 437014 -
torbutton/en/design/index.html.en 1256) nsIContentPolicy::shouldLoad no longer called for favicons</a><p>
torbutton/en/design/index.html.en 1257) 
torbutton/en/design/index.html.en 1258) Firefox 3.0 stopped calling the shouldLoad call of content policy for favicon
torbutton/en/design/index.html.en 1259) loads. Torbutton had relied on this call to block favicon loads for opposite
torbutton/en/design/index.html.en 1260) Tor states. The workaround it employs for Firefox 3 is to cancel the request
torbutton/en/design/index.html.en 1261) when it arrives in the <span class="command"><strong>torbutton_http_observer</strong></span> used for
torbutton/en/design/index.html.en 1262) blocking full page plugin loads. This seems to work just fine, but is a bit
torbutton/en/design/index.html.en 1263) dirty.
torbutton/en/design/index.html.en 1264) 
torbutton/en/design/index.html.en 1265)     </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=309524" target="_top">Bug 309524</a>
torbutton/en/design/index.html.en 1266) and <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=380556" target="_top">Bug
torbutton/en/design/index.html.en 1267) 380556</a> - nsIContentPolicy::shouldProcess is not called.
torbutton/en/design/index.html.en 1268)      <p>
torbutton/en/design/index.html.en 1269) 
torbutton/en/design/index.html.en 1270) This is a call that would be useful to develop a better workaround for the
torbutton/en/design/index.html.en 1271) allowPlugins issue above. If the content policy were called before a URL was
torbutton/en/design/index.html.en 1272) handed over to a plugin or helper app, it would make the workaround for the
torbutton/en/design/index.html.en 1273) above allowPlugins bug a lot cleaner. Obviously this bug is not as severe as
torbutton/en/design/index.html.en 1274) the others though, but it might be nice to have this API as a backup.
torbutton/en/design/index.html.en 1275) 
torbutton/en/design/index.html.en 1276)      </p></li><li class="listitem"><a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=401296" target="_top">Bug 401296 - docShell.allowPlugins
torbutton/en/design/index.html.en 1277) not honored for direct links</a> (Perhaps subset of <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=282106" target="_top">Bug 282106</a>?)
torbutton/en/design/index.html.en 1278)      <p>
torbutton/en/design/index.html.en 1279) 
torbutton/en/design/index.html.en 1280) Similar to the javascript plugin disabling attribute, the plugin disabling
torbutton/en/design/index.html.en 1281) attribute is also not perfect — it is ignored for direct links to plugin
torbutton/en/design/index.html.en 1282) handled content, as well as meta-refreshes to plugin handled content.  This
torbutton/en/design/index.html.en 1283) requires Torbutton to listen to a number of different http events to intercept
torbutton/en/design/index.html.en 1284) plugin-related mime type URLs and cancel their requests. Again, since plugins
torbutton/en/design/index.html.en 1285) are quite horrible about obeying proxy settings, loading a plugin pretty much
torbutton/en/design/index.html.en 1286) ensures a way to break the <a class="link" href="#isolation">Network Isolation</a>
torbutton/en/design/index.html.en 1287) requirement and reveal a user's original IP address. Torbutton's code to
torbutton/en/design/index.html.en 1288) perform this workaround has been subverted at least once already by Kyle
torbutton/en/design/index.html.en 1289) Williams.
torbutton/en/design/index.html.en 1290) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1291)      </p></li></ol></div></div></div></div><div class="sect1" title="7. Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="TestPlan"></a>7. Testing</h2></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1292) 
torbutton/en/design/index.html.en 1293) The purpose of this section is to cover all the known ways that Tor browser
torbutton/en/design/index.html.en 1294) security can be subverted from a penetration testing perspective. The hope
torbutton/en/design/index.html.en 1295) is that it will be useful both for creating a "Tor Safety Check"
torbutton/en/design/index.html.en 1296) page, and for developing novel tests and actively attacking Torbutton with the
torbutton/en/design/index.html.en 1297) goal of finding vulnerabilities in either it or the Mozilla components,
torbutton/en/design/index.html.en 1298) interfaces and settings upon which it relies.
torbutton/en/design/index.html.en 1299) 
torbutton/en/design/index.html.en 1300)   </p><div class="sect2" title="7.1. Single state testing"><div class="titlepage"><div><div><h3 class="title"><a id="SingleStateTesting"></a>7.1. Single state testing</h3></div></div></div><p>
torbutton/en/design/index.html.en 1301) 
torbutton/en/design/index.html.en 1302) Torbutton is a complicated piece of software. During development, changes to
torbutton/en/design/index.html.en 1303) one component can affect a whole slough of unrelated features.  A number of
torbutton/en/design/index.html.en 1304) aggregated test suites exist that can be used to test for regressions in
torbutton/en/design/index.html.en 1305) Torbutton and to help aid in the development of Torbutton-like addons and
torbutton/en/design/index.html.en 1306) other privacy modifications of other browsers. Some of these test suites exist
torbutton/en/design/index.html.en 1307) as a single automated page, while others are a series of pages you must visit
torbutton/en/design/index.html.en 1308) individually. They are provided here for reference and future regression
torbutton/en/design/index.html.en 1309) testing, and also in the hope that some brave soul will one day decide to
torbutton/en/design/index.html.en 1310) combine them into a comprehensive automated test suite.
torbutton/en/design/index.html.en 1311) 
torbutton/en/design/index.html.en 1312)      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://decloak.net/" target="_top">Decloak.net</a><p>
torbutton/en/design/index.html.en 1313) 
torbutton/en/design/index.html.en 1314) Decloak.net is the canonical source of plugin and external-application based
torbutton/en/design/index.html.en 1315) proxy-bypass exploits. It is a fully automated test suite maintained by <a class="ulink" href="http://digitaloffense.net/" target="_top">HD Moore</a> as a service for people to
torbutton/en/design/index.html.en 1316) use to test their anonymity systems.
torbutton/en/design/index.html.en 1317) 
torbutton/en/design/index.html.en 1318)        </p></li><li class="listitem"><a class="ulink" href="https://www.jondos.de/en/anontest" target="_top">JonDos
torbutton/en/design/index.html.en 1319) AnonTest</a><p>
torbutton/en/design/index.html.en 1320) 
torbutton/en/design/index.html.en 1321) The <a class="ulink" href="https://www.jondos.de" target="_top">JonDos people</a> also provide an
torbutton/en/design/index.html.en 1322) anonymity tester. It is more focused on HTTP headers than plugin bypass, and
torbutton/en/design/index.html.en 1323) points out a couple of headers Torbutton could do a better job with
torbutton/en/design/index.html.en 1324) obfuscating.
torbutton/en/design/index.html.en 1325) 
torbutton/en/design/index.html.en 1326)        </p></li><li class="listitem"><a class="ulink" href="http://browserspy.dk" target="_top">Browserspy.dk</a><p>
torbutton/en/design/index.html.en 1327) 
torbutton/en/design/index.html.en 1328) Browserspy.dk provides a tremendous collection of browser fingerprinting and
torbutton/en/design/index.html.en 1329) general privacy tests. Unfortunately they are only available one page at a
torbutton/en/design/index.html.en 1330) time, and there is not really solid feedback on good vs bad behavior in
torbutton/en/design/index.html.en 1331) the test results.
torbutton/en/design/index.html.en 1332) 
torbutton/en/design/index.html.en 1333)        </p></li><li class="listitem"><a class="ulink" href="http://analyze.privacy.net/" target="_top">Privacy
torbutton/en/design/index.html.en 1334) Analyzer</a><p>
torbutton/en/design/index.html.en 1335) 
torbutton/en/design/index.html.en 1336) The Privacy Analyzer provides a dump of all sorts of browser attributes and
torbutton/en/design/index.html.en 1337) settings that it detects, including some information on your origin IP
torbutton/en/design/index.html.en 1338) address. Its page layout and lack of good vs bad test result feedback makes it
torbutton/en/design/index.html.en 1339) not as useful as a user-facing testing tool, but it does provide some
torbutton/en/design/index.html.en 1340) interesting checks in a single page.
torbutton/en/design/index.html.en 1341) 
torbutton/en/design/index.html.en 1342)        </p></li><li class="listitem"><a class="ulink" href="http://ha.ckers.org/mr-t/" target="_top">Mr. T</a><p>
torbutton/en/design/index.html.en 1343) 
torbutton/en/design/index.html.en 1344) Mr. T is a collection of browser fingerprinting and deanonymization exploits
torbutton/en/design/index.html.en 1345) discovered by the <a class="ulink" href="http://ha.ckers.org" target="_top">ha.ckers.org</a> crew
torbutton/en/design/index.html.en 1346) and others. It is also not as user friendly as some of the above tests, but it
torbutton/en/design/index.html.en 1347) is a useful collection.
torbutton/en/design/index.html.en 1348) 
torbutton/en/design/index.html.en 1349)        </p></li><li class="listitem">Gregory Fleischer's <a class="ulink" href="http://pseudo-flaw.net/content/tor/torbutton/" target="_top">Torbutton</a> and
torbutton/en/design/index.html.en 1350) <a class="ulink" href="http://pseudo-flaw.net/content/defcon/dc-17-demos/d.html" target="_top">Defcon
torbutton/en/design/index.html.en 1351) 17</a> Test Cases
torbutton/en/design/index.html.en 1352)        <p>
torbutton/en/design/index.html.en 1353) 
torbutton/en/design/index.html.en 1354) Gregory Fleischer has been hacking and testing Firefox and Torbutton privacy
torbutton/en/design/index.html.en 1355) issues for the past 2 years. He has an excellent collection of all his test
torbutton/en/design/index.html.en 1356) cases that can be used for regression testing. In his Defcon work, he
torbutton/en/design/index.html.en 1357) demonstrates ways to infer Firefox version based on arcane browser properties.
torbutton/en/design/index.html.en 1358) We are still trying to determine the best way to address some of those test
torbutton/en/design/index.html.en 1359) cases.
torbutton/en/design/index.html.en 1360) 
torbutton/en/design/index.html.en 1361)        </p></li><li class="listitem"><a class="ulink" href="https://torcheck.xenobite.eu/index.php" target="_top">Xenobite's
torbutton/en/design/index.html.en 1362) TorCheck Page</a><p>
torbutton/en/design/index.html.en 1363) 
torbutton/en/design/index.html.en 1364) This page checks to ensure you are using a valid Tor exit node and checks for
torbutton/en/design/index.html.en 1365) some basic browser properties related to privacy. It is not very fine-grained
torbutton/en/design/index.html.en 1366) or complete, but it is automated and could be turned into something useful
torbutton/en/design/index.html.en 1367) with a bit of work.
torbutton/en/design/index.html.en 1368) 
torbutton/en/design/index.html.en 1369)        </p></li></ol></div><p>
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1370)     </p></div><div class="sect2" title="7.2. Multi-state testing"><div class="titlepage"><div><div><h3 class="title"><a id="id2707624"></a>7.2. Multi-state testing</h3></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1371) 
torbutton/en/design/index.html.en 1372) The tests in this section are geared towards a page that would instruct the
torbutton/en/design/index.html.en 1373) user to toggle their Tor state after the fetch and perform some operations:
torbutton/en/design/index.html.en 1374) mouseovers, stray clicks, and potentially reloads.
torbutton/en/design/index.html.en 1375) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1376)    </p><div class="sect3" title="Cookies and Cache Correlation"><div class="titlepage"><div><div><h4 class="title"><a id="id2707636"></a>Cookies and Cache Correlation</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1377) The most obvious test is to set a cookie, ask the user to toggle tor, and then
torbutton/en/design/index.html.en 1378) have them reload the page. The cookie should no longer be set if they are
torbutton/en/design/index.html.en 1379) using the default Torbutton settings. In addition, it is possible to leverage
torbutton/en/design/index.html.en 1380) the cache to <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">store unique
torbutton/en/design/index.html.en 1381) identifiers</a>. The default settings of Torbutton should also protect
torbutton/en/design/index.html.en 1382) against these from persisting across Tor Toggle.
torbutton/en/design/index.html.en 1383) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1384)     </p></div><div class="sect3" title="Javascript timers and event handlers"><div class="titlepage"><div><div><h4 class="title"><a id="id2707658"></a>Javascript timers and event handlers</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1385) 
torbutton/en/design/index.html.en 1386) Javascript can set timers and register event handlers in the hopes of fetching
torbutton/en/design/index.html.en 1387) URLs after the user has toggled Torbutton. 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1388)     </p></div><div class="sect3" title="CSS Popups and non-script Dynamic Content"><div class="titlepage"><div><div><h4 class="title"><a id="id2707671"></a>CSS Popups and non-script Dynamic Content</h4></div></div></div><p>
Andrew Lewman add in the torbutton design...

Andrew Lewman authored 13 years ago

torbutton/en/design/index.html.en 1389) 
torbutton/en/design/index.html.en 1390) Even if Javascript is disabled, CSS is still able to 
torbutton/en/design/index.html.en 1391) <a class="ulink" href="http://www.tjkdesign.com/articles/css%20pop%20ups/" target="_top">create popup-like
torbutton/en/design/index.html.en 1392) windows</a>
torbutton/en/design/index.html.en 1393) via the 'onmouseover' CSS attribute, which can cause arbitrary browser
torbutton/en/design/index.html.en 1394) activity as soon as the mouse enters into the content window. It is also
torbutton/en/design/index.html.en 1395) possible for meta-refresh tags to set timers long enough to make it likely
torbutton/en/design/index.html.en 1396) that the user has toggled Tor before fetching content.
torbutton/en/design/index.html.en 1397) 
torbutton/en/design/index.html.en 1398)     </p></div></div><div class="sect2" title="7.3. Active testing (aka How to Hack Torbutton)"><div class="titlepage"><div><div><h3 class="title"><a id="HackTorbutton"></a>7.3. Active testing (aka How to Hack Torbutton)</h3></div></div></div><p>
torbutton/en/design/index.html.en 1399) 
torbutton/en/design/index.html.en 1400) The idea behind active testing is to discover vulnerabilities in Torbutton to
torbutton/en/design/index.html.en 1401) bypass proxy settings, run script in an opposite Tor state, store unique
torbutton/en/design/index.html.en 1402) identifiers, leak location information, or otherwise violate <a class="link" href="#requirements" title="1.2. Torbutton Requirements">its requirements</a>. Torbutton has ventured out
torbutton/en/design/index.html.en 1403) into a strange and new security landscape. It depends on Firefox mechanisms
torbutton/en/design/index.html.en 1404) that haven't necessarily been audited for security, certainly not for the
torbutton/en/design/index.html.en 1405) threat model that Torbutton seeks to address. As such, it and the interfaces
torbutton/en/design/index.html.en 1406) it depends upon still need a 'trial by fire' typical of new technologies. This
torbutton/en/design/index.html.en 1407) section of the document was written with the intention of making that period
torbutton/en/design/index.html.en 1408) as fast as possible. Please help us get through this period by considering
torbutton/en/design/index.html.en 1409) these attacks, playing with them, and reporting what you find (and potentially
torbutton/en/design/index.html.en 1410) submitting the test cases back to be run in the standard batch of Torbutton
torbutton/en/design/index.html.en 1411) tests.
torbutton/en/design/index.html.en 1412) 
Mike Perry Update design doc to reflec...

Mike Perry authored 13 years ago

torbutton/en/design/index.html.en 1413)    </p><div class="sect3" title="Some suggested vectors to investigate"><div class="titlepage"><div><div><h4 class="title"><a id="id2707726"></a>Some suggested vectors to investigate</h4></div></div></div><p>