Matomo-Javascript Tracking Code auslagern
Matomo empfiehlt zum Tracken einer Webseite den Einbau des Codeschnipsels innerhalb des HTML Dokuments … im Head Bereich. [1]
Aber: das Hineinschreiben von Javascript Code in das HTML Dokument ist nicht so recht günstig, wenn man im CSP Security Header das Attribut script-src sicher und ohne unsafe-inline konfigurieren will. [3]
Die Abhilfe besteht darin, dass man [2]
- das Snippet in eine Javascript Datei auslagert.
- den Aufruf des Trackens im Onload Event einfügt - der ebenfalls in der Javascript-Datei ist und nicht im HTML-Code einer Webseite.
Hier einmal ist die Funktion embedTrackingCode benannt:
function embedTrackingCode() { var _paq = window._paq = window._paq || []; _paq.push(["trackPageView"]); _paq.push(["enableLinkTracking"]); var u="/matomo/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', 1]); var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript"; g.defer=true; g.async=true; g.src=u+"matomo.js"; s.parentNode.insertBefore(g,s); }
… welche bei Abschluss des Ladevorgangs initialisiert wird:
window.onload = (event) => { embedTrackingCode(); };
Hinweis:
Wenn der Tracking Code in einer Javascript-Datei ist, muss man das Http-Caching der JS Datei bei einem expires= im Http Response Header beachten. Man ist u.U. nicht mehr so flexibel, wenn man den Code anpassen wollte, weil Browser das Javascript aus dem Cache nehmen, statt frisch vom Server die angepasste Version zu holen. Man kann per ETag cachen lassen … oder kann die JS-Datei mit Versionsnummer benennen.
weiterführende Links:
Spam: Fake-Termin-Flut bei Google-Kalender
Heise meldet: Mails mit Spam-Terminen fluten die Konten von Nutzern des Google-Kalenders. Einen Filter für die automatische Übertragung gibt es nicht.
Ich habe ganz sicher in meinem Google-Kalender noch nie eine bewusste Einstellung getroffen. Wem es ebenso geht, der sollte ebenso einmal seine Einstellungen öffnen und die Option zum Hinzufügen der Einladungen von automatisch (=alle per E-Mail zugestellten Einladungstermine werden immer ohne Zutun im Kalender angelegt - jenes ist das Einfallstor) auf etwas Schwächeres einstellen.
So geht es:
(1)
Einstellungen aufrufen Google Kalender Einstellungen
(2)
… dann links auf “Event settings”
(3)
… dann sollte man die Einstellung bereits sehen:
weiterführende Links:
PHP-Funktion: Passwort-Check bei haveibeenpwned.com
Anbei eine Funktion, die mit der API von haveibeenpwned.com ein Passwort prüft, ob dieses als gehackt gilt.
Wenn die Funktion true zurückliefert, wurde das Passwort gefunden (sprich: wurde gehackt). Diese Funktion kann man z.B. in einer Applikation einbauen, wenn man Benutzer ihr Passwort setzen lässt. Wenn die Funktion true liefert, dann wäre die Benutzereingabe als unsicher zurückzuweisen.
/** * check password in an online database; it returns true if the password * was found in the database * * @see https://haveibeenpwned.com/API/v2 * @param string $sPassword password to check * @param boolean $bShowDebug show debug infos or not (default: false) * @return boolean */ function haveibeenpwned($sPassword, $bShowDebug=false){ // --- make the request $sCheckPwUrl='https://haveibeenpwned.com/api/pwnedpassword/'.sha1($sPassword).'?originalPasswordIsAHash=true'; $context = stream_context_create($opts); $sPwReturn = file_get_contents( $sCheckPwUrl, false, stream_context_create( array( "http" => array( "method" => "GET", "header" => "User-Agent: php-check-4-my-password\r\nAccept: application/vnd.haveibeenpwned.v2+json\r\n" ) ) ) ); $aRespHeader=$http_response_header; echo $bShowDebug ? '<pre>'.$sCheckPwUrl.'<br>' . 'Header: '.print_r($aRespHeader, 1).'<br>' . '$sPwReturn = '.$sPwReturn.'<br>' .'</pre>' : '' ; // --- check result $bFound=array_search('HTTP/1.1 200 OK', $aRespHeader)!==false; echo $bShowDebug ? ( $bFound ? 'ERROR: The password was found in the database :-/' : 'OK: seems not to been hacked yet :-)' ) : ''; return $bFound; }
weiterführende Links:
Innovation Award Oktober 2016 für Klasse ahpwcheck
Ja sowas: mit 37.5 % der Stimmen abgeräumt :-)
Die Javascript-Klasse zählt in einem (Passwort-) Input-Feld Typen von Zeichen und ermittelt Grad der Erfüllung der Anforderungen, Gross- und Kleinschreibung, Ziffern, Sonderzeichen und Anzahl. Plus Mehrsprachigkeit und Callbackfunktion zum Abrunden.
Update:
Auf einen der gesponsorten Preise habe ich verzichtet. Damit können “richtige” oder angehende Programmierer mehr anfangen, als ich. Der Award gehört mir ja bereits - das reicht mir völlig aus :-)
weiterführende Links:
- jsclasses.org: ahpwcheck
- Github: Sourcen inkl. Beispiele
- axel-hahn.de: Docs
Umstellung auf SSL
“Mein” Hoster bietet 1 kostenloses SSL Paket bei shared Hosting an (hätte man einen eigenen Host, könnte man ja ein Zertifikat mit Lets Encrypt installieren).
Das Zertifikat ist seit dieser Woche aktiv und ich habe nun einige Konfigurationen umgeschrieben und Anwendungen (Blog, Diashow, Dokumentationen) angepasst.
Ich glaube, jetzt läuft es. Im Wesentlichen.
Alle Aufrufe mit http werden daher auf https mittels .htaccess umgeleitet.
RewriteEngine on RewriteBase / # 2016-11-23 - force SSL :-) RewriteCond %{SERVER_PORT} 80 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Update:
Wenn eine Subdomain in einem Unterverzeichnis der Hauptdomain liegt (so werden bei Strato die zusätzlichen Domains abgelegt), dann kann man deren Hostnamen mit einem Regex prüfen und von der Umleitung aussliessen.
- RewriteCond %{HTTP_HOST} !.*example\.com [NC]
.* als Platzhalter für beliebige Zeichen: Domain mit allen Subdomains. Bei mehrenen Domains im Paket schreibt man pro Domain eine Zeile - RewriteCond %{HTTP_HOST} !^www1\.example\.com [NC]
mit ^ beginnend genau diese Subdomain und Domain
In der .htaccess des Webroots der Haupdomain kann man schreiben:
RewriteEngine on RewriteBase / # force SSL RewriteCond %{HTTP_HOST} !.*domain2\.de [NC] RewriteCond %{HTTP_HOST} !.*domain3\.de [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
weiterführende Links: