German law wants website owners to place an opt-out control for tracking somewhere on the website. As discussed with matt an iFrame is the only CSRF-safe way of implementing such a feature.
I implemented a small plugin that enables a website owner to place a small iframe with a checkbox on their website. Users can then uncheck that checkbox which sets the piwik_ignore cookie (and vice versa of course) to exclude their visits.
The plugin can be used by placing sth like the following on your website:
I'd be happy to add an extra wiki page for this plugin once it gets integrated into core.
I put this plugin live with my piwik install on geekmonkey.org (right sidebar, bottom box).
Attachment: Patch to add OptOut plugin + translation strings for the plugin (+1 translation for TranslationAdmin which is missing currently)
The current implementation simply checks for the presence of the cookie. To counter abuse, the signed cookie should have some content that can be verified by the tracker.
Setting the cookie is only done if a pre-generated nonce verifies on second request (using Piwik_Nonce). I don't see any way to abuse the cookie as it is bound to the domain that piwik is installed under.
Sorry, I was referring to the tracker when I copy/pasted that.
Patch looks ok, but I would like to refactor the common cookie code (i.e., UsersManager/Controller.php and to a lesser degree, Tracker/Visit.php) into either Common.php or a new file, e.g., core/Tracker/Cookie.php.
(In ) refs #1919
Good idea, reduces unnecessary code duplication! I saw you already started refactoring the code. Let me know if you need any help.
(In ) refs #1919
(In ) fixes #1919 - thanks halfdan for the patch; we'll look at the missing translations separately
(In ) Refs #1919
Sorry guys I messed up and didn't include the last commit. I'll try and do it now
For more info, see User Privacy
Leaving as is for now.
(In ) Refs #1919 partial port of r3555
checkbox doesn't work on IE, reopening
yeah, the fact that urls don't need to be quoted means it's an easy target for xss.
maybe throw an exception if $css contains expression() or url()?
Vote to make OptOut a separate plugin or provide option to block access to it by anonymous users.
+1 for OptOut as a seperate plugin. This is meant as an extension. Most users won't use this plugin as it almost only affects german law. Could be a candidate for making it available through a plugin repository.
Current implementation in trunk adds a huge text to the checkbox. I implemented the template so that it could be added anywhere in the page (e.g. in a header or footer). Users will complain that they can't edit the text.
Also add @import to the blacklist.
Text is not huge, it's 2 sentences explaining what the checkbox is about. Remember it will be used by website visitors, potentially non technical, who don't potentially know anything about analytics and cookies. I got inspiration from few other opt out mechanisms and others were even more verbose.
Of course, we could add a parameter to remove the text if websites want to keep it really simple (and explain it themselves).
Separate plugin VS core - my main thought is that the plugin was just 20 lines or so. It's better not to have small plugins (when they are bundled in core) when there is so little code.
(In ) Fixes #1919 now working in IE
You will have to wait until a proper translation made it into core. For the time being you can add the text yourself by editing lang/de.php. You need to add the translations there (have a look at lang/en.php - search for OptOut). Once this is done you can force the iframe to use the german translation by appending a &lang=de to the URL.
(In ) refs #1919, refs #1929, refs #1982 - delete tracking cookie when opting out (i.e., ignore cookie is set)