Fun: Virenwarnung versendet durch Republic of skincare dot com
Hach, das war ja mal wieder eine lustige Spam-Mail.
Jemand mit Absender info@republicofskincare.com kennt sich supergut mit Computern aus! Bei dem etwas fachfremd anmutenden Domainnamen ist es gut, dass sie sogleich mit fundiertem Wissen glänzen und meine Bedenken sowas von vom Tisch fegen.
Ganz usability freundlich werden mir 2 grosse Buttons angeboten. Der linke von beiden ist geisterhaft weiss und ist nicht beschriftet - den soll ich wahrscheinlich gar nicht anklicken. Dann ist ja nur noch einer übrig. Das nenne ich durchdachte Benutzerführung.
“Branchenbester Malware-Schutz, Adware- und Spyware-Cleaner
Repariert Dateien & ist ressourcenschonender als jedes andere Antivirus.”
Grandios!
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