Labels

Milestone

Assignee

3 participants

I haven't had the time to investigate this any deeper, but the number of people reporting that Piwik is not tracking any visits is increasing and we should take a look at it.

Quote from mutor:I am suspecting that the problem is that the tracking URL structure (query string after piwik.php) has changed slightly with the new version (0.6.3) and many hosts don't allow to have an URL as query string variable because of security reasons (injecting malicious code from external websites).

One of the posts referenced HostGator ... sure enough, I verified they have mod_security and are filtering any URL that contains "http:/" or "https:/" (and escaped variants; note: one forward slash) Reiterating/paraphrasing #564, mod_security users don't do the due diligence to inspect the rules before installing them -- some rules are absolute sh*t. The following return a 403 Forbidden om HostGator:

I proposed that we would still send the protocol (ftp or http) but as separate parameters. The parameters (containing the protocol) can be optional. If specified, the server concatenates it with the url. This allow for backward compatibility and cases where the browser has cached piwik.js.

The installation system check will test an actual URL to see if it fails. If so, it's an error that can't be skipped.

(An alternative would be to query a remote server to get this server's IP address, then reverse whois to see if the IP range is assigned to HostGator or The Planet. One disadvantage of this approach is that it is host provider specific...not that they should be singled out, but they are the leading source for support requests.)

These workarounds are ugly, but do-able.

piwik.js: strip http:// and https:// from url, urlref, link, download, and redirect parameters; server-side: prepend urls with http:// if protocol is missing (to maintain backwards compatibility); make a similar change to PiwikTracker for consistency; similar changes to SitesManager (API.php and SitesManager.js) required

doesn't help with customdata that might contain user-specified URLs

piwik.js: add option to POST the request to the server; add a similar option to PiwikTracker; in both cases, the default is GET; note: subject to same-origin policy

some headers may be suppressed, so Cookie and UserAgent must be sent in the payload

some browsers provide limited information, e.g., no version number in Safari's user agent; Accept-Language not accessible via JavaScript -- might be able to fake it with navigator.language, navigator.browserLanguage, navigator.systemLanguage, and/or navigator.userLanguage