<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
>

  <channel rdf:about="http://lwn.net/headlines/287498/">
    <title>LWN: Comments on "Leaking browser history"</title>
    <link>http://lwn.net/Articles/287498/</link>
    <description>
This is a special feed containing comments posted
to the individual LWN article titled &quot;Leaking browser history&quot;.

    </description>

    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>2</syn:updateFrequency>
    <items>
      <rdf:Seq>
	<rdf:li resource="http://lwn.net/Articles/288662/rss" />
	<rdf:li resource="http://lwn.net/Articles/288625/rss" />
	<rdf:li resource="http://lwn.net/Articles/288588/rss" />
	<rdf:li resource="http://lwn.net/Articles/287832/rss" />
	<rdf:li resource="http://lwn.net/Articles/287738/rss" />
	<rdf:li resource="http://lwn.net/Articles/287718/rss" />
	<rdf:li resource="http://lwn.net/Articles/287698/rss" />
	<rdf:li resource="http://lwn.net/Articles/287695/rss" />
	<rdf:li resource="http://lwn.net/Articles/287659/rss" />
	<rdf:li resource="http://lwn.net/Articles/287658/rss" />
	<rdf:li resource="http://lwn.net/Articles/287609/rss" />
	<rdf:li resource="http://lwn.net/Articles/287593/rss" />
	<rdf:li resource="http://lwn.net/Articles/287576/rss" />
	<rdf:li resource="http://lwn.net/Articles/287572/rss" />
	<rdf:li resource="http://lwn.net/Articles/287569/rss" />
	<rdf:li resource="http://lwn.net/Articles/287567/rss" />
	<rdf:li resource="http://lwn.net/Articles/287557/rss" />
	<rdf:li resource="http://lwn.net/Articles/287554/rss" />
	<rdf:li resource="http://lwn.net/Articles/287550/rss" />
	<rdf:li resource="http://lwn.net/Articles/287548/rss" />
	<rdf:li resource="http://lwn.net/Articles/287546/rss" />
	<rdf:li resource="http://lwn.net/Articles/287544/rss" />
	<rdf:li resource="http://lwn.net/Articles/287545/rss" />
	<rdf:li resource="http://lwn.net/Articles/287538/rss" />
	<rdf:li resource="http://lwn.net/Articles/287532/rss" />
      
      </rdf:Seq>
    </items>

  </channel>
    <item rdf:about="http://lwn.net/Articles/288662/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/288662/rss</link>
      <dc:date>2008-07-04T07:05:08+00:00</dc:date>
      <dc:creator>okeydoke</dc:creator>
      <description>
      Just use &lt;a href='http://www.safecache.com'&gt;SafeCache&lt;/a&gt; and 
&lt;a href='http://www.safehistory.com'&gt;SafeHistory&lt;/a&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/288625/rss">
      <title>NoScript does help</title>
      <link>http://lwn.net/Articles/288625/rss</link>
      <dc:date>2008-07-03T22:02:54+00:00</dc:date>
      <dc:creator>roc</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
That's correct.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/288588/rss">
      <title>NoScript does help</title>
      <link>http://lwn.net/Articles/288588/rss</link>
      <dc:date>2008-07-03T18:58:32+00:00</dc:date>
      <dc:creator>aquasync</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
While I haven't tested it, I'd presume its also possible to harvest this information server
side, solely with CSS, by accessing uniquely named zero sized images in the appropriate
styles.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287832/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287832/rss</link>
      <dc:date>2008-06-28T19:34:23+00:00</dc:date>
      <dc:creator>man_ls</dc:creator>
      <description>
      Seconded. It could get a little annoying if link colors depended on whether I brought up www.lwn.net, lwn.net, https://lwn.net, and so on. But most of the time it would be fine, and a little heuristics (such as storing just the second level domain) would do the rest.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287738/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287738/rss</link>
      <dc:date>2008-06-27T09:33:57+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Ah, yes. I must agree with that. I actually use a per-user stylesheet to 
force visited links to be rendered as I like, dammit, specifically because 
of annoying sites like you describe.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287718/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287718/rss</link>
      <dc:date>2008-06-27T00:34:37+00:00</dc:date>
      <dc:creator>wahern</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Not all links. Just links outside the domain.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287698/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287698/rss</link>
      <dc:date>2008-06-26T20:37:51+00:00</dc:date>
      <dc:creator>droundy</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
This sounds to me like a perfect solution.  It maintains most of the currently used (and
useful) functionality, while at the same time closing the hole, as far as I can see.  Does
anyone have an idea whether this is under discussion by the folks at mozilla?
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287695/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287695/rss</link>
      <dc:date>2008-06-26T20:12:34+00:00</dc:date>
      <dc:creator>mrshiny</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
The problem is that you can deduce the status of visited links indirectly without accessing
the link in the dom.  This is because a link which contains text is rendered in a way that
takes up space on the page.  If a visited link changes the size of its container you'd be able
to deduce that a link was visited by examining the container.  You'd need to taint the entire
dom at that point.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287659/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287659/rss</link>
      <dc:date>2008-06-26T16:26:25+00:00</dc:date>
      <dc:creator>iabervon</dc:creator>
      <description>
      Actually, it's completely conforming for a browser to simply never say a link has been visited (and render it in the :link style), or to claim to have rendered it in the non-visited style while showing it to the user in the visited style (not that this couldn't social-engineer the user into disclosing the information). See &lt;a href='http://www.w3.org/TR/CSS21/selector.html#link-pseudo-classes'&gt;The CSS spec&lt;/a&gt;.
&lt;p&gt;
Alternatively, browsers could say that the domain or URL of the page containing the link (or something else suitable) is part of the identity of the link for purposes of determining whether you've previously visited it, and therefore only disclose to sites whether you previously clicked on this very link, rather than disclosing whether you've visited the target at all. (In general, sites can easily collect information on which of their links you've used with an &quot;onclick&quot; event handler, and I don't think people expect privacy with respect to the source site there.) This change would mean that links to sites you visit from sites you haven't visited look new, but I don't think that would be an unwelcome change for users.

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287658/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287658/rss</link>
      <dc:date>2008-06-26T15:36:58+00:00</dc:date>
      <dc:creator>johnkarp</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Couldn't you add a data tainting mechanism to JS/DOM, such that the client 
side can use the history, but nothing derived from it can be sent to a 
server?
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287609/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287609/rss</link>
      <dc:date>2008-06-26T13:31:48+00:00</dc:date>
      <dc:creator>Jonno</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
There is one solution to this problem that would not break the DOM model, but it would
introduce a loss of (minor) functionality. The browser simply don't set the 'visited'
pseudoclass to any links!

That means all links looks like they are unvisited, both in the UI and for any scripts. So the
user looses the usual visual clue to whether a link has already been visited but gains some
privacy.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287593/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287593/rss</link>
      <dc:date>2008-06-26T12:23:17+00:00</dc:date>
      <dc:creator>NAR</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
I might be missing something, but e.g. Opera has a feature to disable the site CSS and use a
&quot;user CSS&quot; and this would eliminate this bug. Of course, in this case the web starts to look
quite differently than it used to do :-)
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287576/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287576/rss</link>
      <dc:date>2008-06-26T09:33:24+00:00</dc:date>
      <dc:creator>ekj</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
You misunderstand. It's not what the -user- has changed. It's what the -site- has changed.

If I design a malicious site with the goal of spying out which pages you have visited, there's
nothing stopping ME from specifying that visited-links should be in 20pt and nonvisited in
10pt, and then use javascript to figure out which ones fall in which category. (the links can
be invisible to you, say by having the background-color or being in a div that has
display:none.

I'm with the other reply: Render -ALL- links as if they're nonvisited, then apply some local
(not influenced by site-CSS) decoration-change that is invisible in the DOM. 

Yes, this means site lose the possibility of specifying how visited links should look. An
advantage anyway since most use that only to set them equal to nonvisited in the first place,
because it offends &quot;designers&quot; to have lists of links that have two different looks.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287572/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287572/rss</link>
      <dc:date>2008-06-26T09:18:25+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
But 99.9% of users do not change anything but the link colour. Having it lie about that alone
seems perfectly practical (yes, if the page modifies its background colour such that all links
are visible even if the user has changed their colour, that code will break, but *that* is
done by essentially nobody).

&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287569/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287569/rss</link>
      <dc:date>2008-06-26T08:52:18+00:00</dc:date>
      <dc:creator>jamesh</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
It depends on what the you consider to be privacy-leaking functions.

If the CSS visited handling remains intact, getComputedStyle() is not the only way to get at
the information.  If you specify a different font size for visited links, then the dimensions
of any parent element will leak the information.

Displaying all links as non-visited is pretty much the only way of fixing the bug.  Applying
the browser's visited link colour when rendering while leaving the DOM as is might be an
option, but that leads to accessibility problems for sites that change font/background colours
(i.e. almost every site).
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287567/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287567/rss</link>
      <dc:date>2008-06-26T08:31:35+00:00</dc:date>
      <dc:creator>rvfh</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Thanks for that: this was the main information missing from the article...

But that means there is really no solution then, except not remembering which sites were
visited at all?

Mind you, the browser could apply (and report) the same style to visited and not visited
links, and add some local information (like special background) in the rendering of the
page...

Are there any sites relying on the visited links to render their page? Like: if you visited
the 'New stuff' page then the news are not the latest but the greatest kind of thing? I expect
some must do?
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287557/rss">
      <title>It's not as simple as that.</title>
      <link>http://lwn.net/Articles/287557/rss</link>
      <dc:date>2008-06-26T07:56:43+00:00</dc:date>
      <dc:creator>khim</dc:creator>
      <description>
      &lt;p&gt;&lt;i&gt;Afterall the situation is, from the pages perspective, completely identical to a broweser with no saved history at all.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Not really. If &quot;visited&quot; links are using significantly different fonts (20pt vs 10pt) JavaScript &lt;b&gt;still&lt;/b&gt; can pull information about you history - by calculating sizes of visited and unvisited links. So you need to lie about geometry of object which includes link. Further you need to lie about sizes of objects, placements of objects (big &quot;visited&quot; link can be forced to overlap with something while small &quot;unvisited&quot; link will not do so), etc.&lt;/p&gt;

&lt;p&gt;It short: it's &lt;b&gt;nothing&lt;/b&gt; like &quot;completely identical to a broweser with no saved history at all&quot;. It's almost impossible to do this &quot;right&quot;. The only solution is to remove all style changes from &quot;visited&quot; links except safe ones (color and probably nothing else) - and that's quite intrusive change...&lt;/p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287554/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287554/rss</link>
      <dc:date>2008-06-26T07:12:40+00:00</dc:date>
      <dc:creator>ekj</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Would it be possible for the browser to lie without much consequence ?

Couldn't the browser -actually- render links according to their visited-status, but
nevertheless in the javascript-accessible DOM *pretend* that all links are unvisited ?

Okay, so that migth make it technically noncompliant, but from the point of view of the page,
everything should work perfectly. 

Afterall the situation is, from the pages perspective, completely identical to a broweser with
no saved history at all.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287550/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287550/rss</link>
      <dc:date>2008-06-26T06:40:26+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
this wouldn't be the first time that safety requires 'breaking' the official standard of
something (just about all anti-spam functionality involves 'breaking' the initial SMTP
standards (although recent revisions may have been changed to allow current behavior)

changing the implementation so that the status of the links (and anything else that the
browser sets based on it's private information) is not qble to be queried by any code sent as
part of that page is a smart thing to do, and once it's done by a few browsers it will get
written into the next version of the standard (as an optional mode of operation)

as noted, the result will not look any different to the page then if the browser didn't have
any relavent history.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287548/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287548/rss</link>
      <dc:date>2008-06-26T05:48:30+00:00</dc:date>
      <dc:creator>cventers</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Konqueror does something lik this intelligently already. For &quot;Open new 
windows&quot;, you can choose &quot;Allow&quot;, &quot;Ask&quot;, &quot;Deny&quot; and &quot;Smart&quot;. They also 
have an &quot;Allow&quot; and &quot;Ignore&quot; for:

1. Resize window
2. Move window
3. Focus window
4. Modify status bar text

Presumably, they could add a 5:

5. Examine URL history
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287546/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287546/rss</link>
      <dc:date>2008-06-26T05:42:33+00:00</dc:date>
      <dc:creator>jhs</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Perhaps NoScript or another extension could have a new option along the lines of &quot;Allow
Javascript, but disable/override privacy-leaking functions in a non-standard way&quot;?  The
wording is awkward but it might be a reasonable compromise for some situations.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287544/rss">
      <title>NoScript does help</title>
      <link>http://lwn.net/Articles/287544/rss</link>
      <dc:date>2008-06-26T05:38:56+00:00</dc:date>
      <dc:creator>jhs</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
Well, the thing about NoScript is you whitelist only the sites you trust (or at least, sites
which you have to use regularly).  After you build up a whitelist for a week or so, the web is
basically usable again.

Having said that, I eventually disabled NoScript for personal use since it is indeed quite a
price to pay.  (I still use Flashblock, however.)  But the security benefits are real.  Just
because it's a bit much for home use doesn't mean it's not a good component of a
defense-in-depth strategy for Government, Military, or some other sensitive situation.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287545/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287545/rss</link>
      <dc:date>2008-06-26T05:35:44+00:00</dc:date>
      <dc:creator>jwb</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
This would definitely break a specified behavior of the DOM.  If you call getComputedStyle you
expect to get the computed style.  If you can get the computed color, then you can get the
visited or unvisited status of a link.  Simple as that.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287538/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287538/rss</link>
      <dc:date>2008-06-26T03:41:59+00:00</dc:date>
      <dc:creator>elanthis</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
I'm not really sure it would be a &quot;broken DOM&quot; - it would just be an option to willfully
choose to not store history in a way accessible by the DOM.  It would be no different (from
the standpoint of the DOM and JavaScript) than a browser which does not remember history at
all.

I have to admit, there are only two or three places I ever use the colored history links.  And
even those are just because it's only slightly more convenient to use them than to look at the
timestamps on the link text.
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/287532/rss">
      <title>Leaking browser history</title>
      <link>http://lwn.net/Articles/287532/rss</link>
      <dc:date>2008-06-26T02:39:24+00:00</dc:date>
      <dc:creator>cventers</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;&lt;pre&gt;
That is an interesting problem indeed... it sounds like the appropriate 
fix might involve an option in the browser's configuration so that users 
can choose between having a slightly broken DOM and a slight privacy leak. 
&lt;/pre&gt;&lt;/div&gt;

      
      </description>
    </item>
</rdf:RDF>

