I too know the websites you visited
oxplot.github.com
oxplot.github.com
About a year after the product launch we were contacted by a powerful washington based lobby group and they wanted to chat. They felt it violated a site visitor's "reasonable expectation of privacy". I agreed. So we pulled the feature and dodged a bullet as this "browser bug" hit the mainstream press a few months later. The feature wasn't a major part of our product's value prop, few of our customers used it and none missed it.
So if you're thinking about basing a startup on this, don't. You will get a call very quickly from organizations much larger than you are asking awkward questions.
So your cache will end up with images from each of those sites.
Note that it doesn't need to be 100% accurate to be effective. If it guesses better than 50% (i.e. coin flip), then it could be used to give guesses with at least some confidence. No different than analyzing any other noisy dataset. Because this all works client-side, it can also be done quite invisibly.
http://ajaxian.com/archives/spyjax-using-avisited-to-test-yo...
https://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Pri...
Although, the Google test on that page is currently broken. The Facebook and Twitter ones aren't.
Seems like i'm 50% male 50% female :D
It would be interesting if someone updated it to use this new trick or even just as a Chrome extension.
Best of luck, it's an interesting concept!
If I re-run the test it still gets some sites wrong (says I haven't visited them when in fact I have). It even claims I haven't visited Amazon both times when in fact it's open in another tab.
It seems to work better on slower internet connections. The script returns calls a site "visited" if the response time of the potentially cached image is less than 1/20 the time of the certainly uncached image.
On slow connections the cache is much faster than the uncached. On fast connections it's only slightly faster. However, the known uncached images sometimes have "10x increase in latency" so it seems that based on my (and other's experience) that this is a major problem.
One could attempt to normalize this for the sites where appending random query string causes higher latency. Simply precalculate the added latency from images with the random query string on a per site basis. Then subtract it from "uncachedTime."
Screenshot: http://cl.ly/1i0921270W2b1u190b0W
facebook: 'https://s-static.ak.facebook.com/rsrc.php/v1/yJ/r/vOykDL15P0R.png',
twitter: 'https://twitter.com/images/spinner.gif,
digg:http://cdn2.diggstatic.com/img/sprites/global.5b25823e.png,
reddit: 'http://www.redditstatic.com/sprite-reddit.pZL22qP4ous.png,
hn: 'http://ycombinator.com/images/y18.gif,
stumbleupon: 'http://cdn.stumble-upon.com/i/bg/logo_su.png,
wired: 'http://www.wired.com/images/home/wired_logo.gif,
....I do use NoScript and Ghostery, though, and I could see how that might cause some false negatives.
Running in Chrome's incognitive mode is a bit different though. only 7 show up cached the first time its run.
But don't despair, I have one of the most hostile browser settings. I have RequestPolicy, NoScript,and Flashblock.
That's probably due to me blocking facebook and twitter widgets on sites other than Fb and twitter though.
The first time, I had one 'visited', the second time about half were 'visited'. I'm surprised not all of them were, though...
I wonder if the use of ghostery, no-script, that sort of thing, is what bamboozles it? Overall, it looks like it's guessing.
The first try was pretty correct though.
Several others it said I didn't visit but I did.
And it said I visited linkedin, and I didn't.
For all the entries I got "not visited", even though I visit a lot of them.
Ran it again, ALL of them appeared visited. Even sites like abebooks, which I have not visited at all.
I just don't see any practical application for this method with such high error rates. The methods mentioned above are only valuable if you can guarantee at least relative reliability. By and large the results have been seemingly random, with only one or two persons reporting 100% correctness. So what's the difference between running a test with wildly unreliable results and just doing something randomly?
Even so, even without doing any work to ameliorate these flaws, it could still be (ab)used. Don't assume that it's only useful if everyone can scan which of the top 100 websites you've visited.
Any site could use this to check which competitors' sites have been visited. It's unlikely anyone else has an interest in checking that information, so the cache is not going to be poisoned by anyone else. With knowledge of which competitors a potential customer has checked out, you could do some effective price discrimination -- the guy looking at the $10 solutions sees your lowest price, while the guy looking at some competing Microsoft Dynamics package enters a more enterprisey sales funnel.
It's also useful for retargeting. Throw the code up on an ad network and you only test for cache hits against domains of current advertisers. If there's a hit, store it in a cookie so you don't need to check the (now filled) cache again. You can now show ads for companies a person has already had an interaction with, without having to cookie every visitor to the advertisers' sites first.
It doesn't take much to come up with (mostly nefarious) uses for this, even without perfect accuracy and even without the ability to have multiple parties check the same URLs.
It also doesn't take much to come up with ways to improve the process. You can ameliorate the problem of overlapping testers by having a large pool of URLs from each site to check. The average top 1000 site probably has dozens and dozens of images and other resources per page, each of which can be used for a cache test.
Chromium on Linux
script FAIL !