Piwik absichern

Piwik absichern

Das Webanalytik-Tool Piwik sollte eigentlich mit Bordmitteln sicher sein. Eigentlich. Denn bei genauerer Betrachtung fällt auf:

  • Alle Dateien von Piwik liegen im wwwroot, sind also potentiell für jedermann zugänglich
  • Manche Skripte, die auf dem Server ausgeführt werden, führen massenhaft Requests aus und sind möglicherweise für Zugriffe von außen ausgelegt. Ein Angreifer könnte ähnliche Requests absetzen, was im besten Szenario Müll und im schlechtesten Szenario eine kompromittierte Installation hinterlässt.

Im Folgenden wird daher versucht, einem anonymen Benutzer nur die Dateien zugänglich zu machen, die tatsächlich für das Tracking durch Piwik notwendig sind. Die folgenden Maßnahmen sind lediglich als Ergänzung der Sicherheitsinfrastruktur von Piwik zu verstehen und ersetzen diese keinesfalls.

Proxy-Datei anlegen

Ungünstigerweise verwendet Piwik ein und die selbe index.php für die Verwaltungsoberfläche als auch für Aktionen, die von anonymen Benutzern verwendbar sein müssen, wie etwa den Opt-Out-Mechanismus. Damit Requests bezüglich der Verwaltungsoberfläche leichter von anderen Requests unterscheidbar werden, können letztere in eine eigene PHP-Datei abgetrennt werden, welche als Stellvertreter (Proxy) fungiert.

Das Anlegen einer Proxy-Datei ermöglicht einerseits, den Zugriff auf diese Datei mittels .htaccess zu erlauben, andererseits kann die Datei prüfen, ob der Nutzer tatsächlich eine Route mittels GET-Parametern gewählt hat, die zulässig sein soll.

Exemplarisch hier eine Datei idxsec.php, welche für den Opt-Out-Iframe von Piwik benutzt werden könnte:

<?php
if ($_GET['module'] === 'CoreAdminHome' && $_GET['action'] === 'optOut') {
    require_once('index.php');
} else {
    echo 'Error: Route not allowed.';
}

Sind alle benötigten Routen hinterlegt, kann man die index.php für anonyme Benutzer sperren und stattdessen die idxsec.php in der Iframe URL verwenden.

Piwik-Backend mit .htaccess absichern

Zusätzlich zum Zugriffsschutz, den Piwik von Haus aus mitbringt, kann die Verwaltungsoberfläche und alle Ressourcen, die von anonymen Benutzern nicht benötigt werden, zusätzlich mittels .htaccess-Datei (im www-root von Piwik) zugriffsgeschützt werden. Die Proxy-Datei idxsec.php muss hierbei zugänglich bleiben, denn sonst funktioniert das Opt-Out nicht mehr.

Apache 2.4:

<Files "*">
    AuthUserFile /path/to/piwik.htpasswd
    AuthName Piwik-Password
    AuthType Basic

    <RequireAny>
        Require valid-user
        Require ip 127.0.0.1 <your-server-ip> #needed for some scripts
    </RequireAny>
</Files>
<Files ~ "^piwik\.(js|php)|robots\.txt|idxsec\.php|favicon\.ico$">
    Require all granted
</Files>

Apache 2.2

<Files "*">
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 <your-server-ip> #needed for some scripts
    AuthUserFile /path/to/piwik.htpasswd
    AuthName Piwik-Password
    AuthType Basic
    require valid-user
    Satisfy any
</Files>
<Files ~ "^piwik\.(js|php)|robots\.txt|idxsec\.php|favicon\.ico$">
    Allow from all
    Satisfy any
</Files>