OpenID, WordPress 3.0.1 and Brokenness
So, I am officially super annoyed with both OpenID and with WordPress right now. There is a bug in the OpenID plugin developed by the Diso project (thanks guys), I have been using this plugin for a while now, but it seems very broken at the moment.
I have managed to get my OpenID server working, my OpenID URI being https://mmt.me.uk/blog/, but I have yet (after hours of trying), managed to get OpenID commenting fixed on my blog.
So my apologies if you try and comment on my blog using your OpenID, as it doesn’t work.
The most annoying thing about this whole issue is the fact that I get perhaps the least helpful error message ever. The following error message pops up when I attempt to use my colleagues OpenID to post a comment to one of my articles, this following error message gets sent to my STERR :
[Fri Aug 20 12:01:14 2010] [error] [client XXX.XXX.XXX.XXX] Successfully fetched 'http://steve.harris.name/': GET response code 200, referer: https://mmt.me.uk/blog/2010/07/30/the-facebook-like-button/
“200, and Successfully fetched!” my ass!
In order to get the OpenID server working I had to apply a patch, which has been raised as a ticket on the diso project issue tracker. In short, there are two required changes, due to PHP 5.3 funkiness, required to make the OpenID server work.
These couple of changes to the OpenID libraries which came with my version of WordPress is due to the fact that PHP 5.3 has clamped down on the returning of values when expecting a reference to be returned by a function, this phenomena was illustrated in the following errors :
<br />
[Sun Apr 18 23:40:05 2010] [error] [client 140.203.155.13] PHP Warning: Parameter 1 to Auth_OpenID_Server::openid_associate() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1702<br />
[Sun Apr 18 23:40:05 2010] [error] [client 140.203.155.13] PHP Fatal error: Call to a member function needsSigning() on a non-object in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1495<br />
[Sun Apr 18 23:40:06 2010] [error] [client 78.86.167.133] PHP Warning: Parameter 1 to Auth_OpenID_CheckIDRequest::fromMessage() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1576, referer: http://apassant.net/blog/2010/04/18/sparql-pubsubhubbub-sparqlpush?destination=node%2F374<br />
[Sun Apr 18 23:49:36 2010] [error] [client 193.203.240.209] PHP Warning: Parameter 1 to Auth_OpenID_Server::openid_associate() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1702<br />
[Sun Apr 18 23:49:36 2010] [error] [client 193.203.240.209] PHP Fatal error: Call to a member function needsSigning() on a non-object in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1495<br />
[Sun Apr 18 23:49:52 2010] [error] [client 193.203.240.209] PHP Warning: Parameter 1 to Auth_OpenID_Server::openid_associate() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1702<br />
[Sun Apr 18 23:49:52 2010] [error] [client 193.203.240.209] PHP Fatal error: Call to a member function needsSigning() on a non-object in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1495<br />
[Sun Apr 18 23:50:27 2010] [error] [client 216.97.225.85] PHP Warning: Parameter 1 to Auth_OpenID_Server::openid_associate() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1702<br />
[Sun Apr 18 23:50:27 2010] [error] [client 216.97.225.85] PHP Fatal error: Call to a member function needsSigning() on a non-object in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1495<br />
[Sun Apr 18 23:50:28 2010] [error] [client 78.86.167.133] PHP Warning: Parameter 1 to Auth_OpenID_CheckIDRequest::fromMessage() expected to be a reference, value given in /media/data/www/mmtmeuk/public_html/blog/wp-content/plugins/openid/Auth/OpenID/Server.php on line 1576, referer: http://www.pillwatch.com/proc_openid-login.php<br />
There is a page which describes the patch one needs to run to overcome this:
http://patchlog.com/wp-content/uploads/2009/11/openid-server-php.5.3.diff
I need to get on with other stuff now, will revisit this in the future …
Signing Mail on Snow Leopard
Yay finally, come across an update to the GPGMail plugin for Mail.app 4.3 on Snow Leopard. This is the one bit of functionality which I have missed since upgrading from Leopard to Snow Leopard, and have been searching for updates periodically for a while now.
This is fanstatic news, as I can now digitally sign my emails, with my GPG identity, which can be found linked to from my FOAF file.
The Facebook Like Button, and how it is following you around the web
There has been a lot of hype and talk around the Facebook Like button, and I do understand that the issues I raise in this blog post have been addressed before, I will cite some relevant literature at the bottom of this post.
In short, I fear that Facebook via the Facebook Like button which you can find on many high volume, mainstream sites, such as imdb, rottentomatoes, cnn, etc, is tracking you even if you are not logged into Facebook from your browser.
So, I have no solid evidence to say that they are DEFINITELY doing so, but I will explain why it is technically possible for them to do so. And well, the cynic in me thinks that if it is technically possible for facebook to log that my facebook id is on a given page, it will, regardless of whether or not I am logged in or not.
From this point onwards, I will be referring to all of various versions of the Like button, i.e. Like, Recommend, Fan, etc as the Facebook Like button.
So, the Facebook Like button can be implemented in one of two ways, using facebook’s XFBML or via the inclusion of a Facebook iFrame. FWIW, all of the instances of the Like button I have come across have been implemented using the iFrame approach, but I will look into the XFBML method of doing things soon and will blog about it then (he says …)
So, if you are a facebook user, and you have visited facebook
since the last time you cleared you cookies, you will have a facebook cookie in your browser. It is this cookie which allows facebook to inform you of how many of your friends have liked the page your browser is currently pointing to. An example of functionality can be seen in the below screenshot.
I am aware that if you are signed out of facebook you wont see your list of friends which are have already clicked the like button, you will end up seeing something like:
So, given that the Like button is an iFrame, i.e. it is actually hosted on www.facebook.com, it means that facebook can read your facebook.com cookies, and they can tell whether you are logged in (to show you which are of your friends have “liked” the page before you). And well, technically this implies that they know who you are which enables them to tell whether you are logged in or not.
Dan Brickley created a neat drawing of the what a iFrame is actually doing (thanks Dan, and see below). The illustration highlights the fact that a page which seems to be coming from a given web address, if it includes an iFrame, is actually coming from multiple web servers.
This is danbri’s illustration of what an webpage which includes iFrame’s is actually doing
This makes me class the Facebook Like button in the same category as ad tracking sites, insofar as the fact that if you turn up to a page with a Like iFrame, and you have a facebook cookie, you are in theory being tracked, regardless of whether or not you choose to click the Like button or not.
So, why do I class this in with ad trackers, I do this because of the fact that you are being tracked passively, i.e. regardless of whether or not you choose to like something, facebook is theoretically logging the fact that you have been to that website.
So, now to give an example :
Let’s say that you turn up to cnn.com can you visit the below article:
http://www.cnn.com/2010/US/07/29/wisconsin.roush.crash/
The page them subsequently loads up the following iFrame and serves it to you, it renders the Like button on the page, the iframe revolves to a url on facebook.com
http://www.facebook.com/plugins/like.php?action=recommend&…
By going to the first URL, you are also hitting the second one. Your user-agent, which based on http://panopticlick.eff.org/, is kinda uniquely identifiable, and is therefore in facebook’s logs. Given that the iFrame (second URL above) is hosted on facebook’s site, they CAN read your facebook cookies, am NOT saying that they do as I can’t prove that in anyway, but my guestimate is that if they are not, they will be in the future.
So, I can see three scenarios, which are relevant to this
- A user is logged into facebook in their browser, and then visits a site in a different tab, not even knowing that the site has a facebook “like” button, because you will only become aware of the “like” button upon arriving at the page and having it in loaded in your browser, which is too late from my POV. This happened to me last night, and happened to me recently when I went to imdb (sighes).
- A user is not logged into facebook, but has facebook cookies in their browser, they go to cnn.com, facebook knows (with a high probability) that a given facebook ID has visited a given site, by virtue of cookies and stuff
- User has no facebook cookies, and then facebook will only get the user’s user-agent in their access logs, which I bet they store (even though once again I have no proof of this.
Ok, so solutions:
Solution 1 :
You can delete all of you facebook related cookies from your main browser (firefox being browser of choice), and then you can download another browser which you use for facebook’ing, so that you are no longer given facebook the option to track the pages you read on the web.
Solution 2 :
Which is the solution I am going for at the moment is that you can install Adblocker Plus and you can block all of the Facebook Like endpoints, using custom filters.
This is an export of my Facebook Like button filters, it is probably far from complete, and I will put it up a service which you can subscribe to in Adblocks Plus, and will update the list of URLs as and when I come by them (will blog post when I am done with this.)
<br />
[Adblock]<br />
! Checksum: 1+81iD/9dKSZiqqW6WtQxA<br />
http://www.connect.facebook.com/widgets/likebox.php?*<br />
http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php?*<br />
http://www.connect.facebook.com/widgets/like.php?*<br />
http://www.connect.facebook.com/widgets/fan.php?*<br />
http://www.facebook.com/plugins/fan.php?*<br />
http://www.facebook.com/widgets/likebox.php?*<br />
http://www.facebook.com/plugins/likebox.php?*<br />
http://www.facebook.com/plugins/like.php?*<br />
http://www.facebook.com/widgets/fan.php?*<br />
http://www.facebook.com/widgets/like.php?*<br />
The following screenshot, shows what my current step looks like in Adblocker plus:
My colleague Vaidas Jablonskis (who is awesome), pointed me to Adbocker Plus which is also totally awesome 🙂
Finally, it is worth mentioning that I am not sure whether or not all of these sites which have facebook like buttons are explicit about the fact that their users CAN be tracked passively by facebook. Or whether reputable brands like CNN have any form of agreement with Facebook regarding whether or not their users are being track. Are any of these big companies, breaking their terms and conditions ?
I will post an update on step by step instructions regarding how to subscribe to my Adblock filter list of facebook like buttons endpoints soon.
So, I suggest people download and install Adblock and block facebook like buttons, and subsequently install the Facebook Like plugin , so that they are no longer being passively tracked by Facebook, and so that they are in control of when they tell Facebook that they like a given web page.
Finally, links to existing literature in this space:
http://techcrunch.com/2010/04/23/like-buttons-evil-facebook-not-open/
http://philosophicalzombie.net/post/540799211/has-facebook-just-become-the-evil-empire-whats-wrong
Comment, corrections, or a simple “you are wrong because …” are very welcome 🙂
Happy Interneting People