So sicherst du die Website deiner Organisation!

So sicherst du die Website deiner Organisation!

Durch die Website deiner Organisation oder deines Clans repräsentierst du nicht nur dich und deine Organisation im World Wide Web, sondern auch jedes einzelne Mitglied! Umso wichtiger ist es, dass die Website nicht nur ansehnlich und funktionell aufgebaut ist, sondern auch aktiv gegen Gefahren abgesichert wird.

Leider ist die Sicherheit ein oft sehr unterschätztes Thema. Aus dem Grund hat Timo mich eingeladen, um euch die Möglichkeiten eine Website abzusichern in einem Blog-Post näherzubringen. Ich bin im Übrigen der Maurice von mauricewoitzyk.de und auf meinem Blog schreibe ich regelmäßig über das ethische Hacken, Webentwicklung, Counter Strike: Global Offensive und andere Themen die mich interessieren.

Vorwort

Zuallererst muss man anmerken, dass es natürlich unzählige Möglichkeiten gibt, um deine Organisationswebsite zu realisieren. Die allermeisten allerdings setzen auf WordPress, sodass ich auch die meiste Zeit dieses Beitrages bei WordPress bleibe.

Natürlich werden wir aber auch grundlegende Dinge besprechen, die jede Website erfüllen muss und weitere Dinge die man als zusätzlichen Schutzfaktor einbauen kann. Ich bin gespannt was wir am Ende alles zusammen getragen haben.

WordPress

Wusstest du, dass ca. 40 % aller Webseiten im Internet mithilfe des CMS WordPress erstellt wurden? Ich möchte euch nun ein paar hochkarätige Webseiten nennen, welche WordPress nutzen. Das weiße HausWalt DisneyNew York Post und um mal ein deutsches Beispiel zu bringen auch the G.O.A.T. Michael Schumacher!

Dementsprechend bauen auch viele Gaming-Organisationen, Clans und Veranstalter auf WordPress. So fallen mir spontan die Internetauftritte von BIGSprout und SUNBURN und ein.

WordPress bietet einem einfach diverse Vorteile. Dazu zählen einfache Verwaltung, kein bis kaum Programmieraufwand (wenig Aufwand für kleine Änderungen am Core), eine riesige Community, aktive Entwicklung und viel mehr.

Da WordPress auch so verbreitet ist, werden dementsprechend auch oft solche Webseiten angegriffen. Ich nehme meinen privaten Blog mal als Beispiel. Er ist zwar nicht unbedingt der bekannteste Blog, allerdings auch nicht ganz unbekannt.

Bei mir wird inzwischen mindestens 2 bis 3 Mal am Tag versucht auf Konfigurationsdateien zuzugreifen, oder es werden nicht vorhandene Linkstrukturen aufgerufen, die – sofern das dafür erforderliche Plugin installiert ist – eine Sicherheitslücke darstellen. Dort wird höchstwahrscheinlich mit Google Dorks gearbeitet.

Firewall gefällig?

 

Aus diesem Grund gibt es diverse Plugins, welche deine WordPress Website härten und dadurch sicherer machen. Das wichtigste Plugin ist meiner Meinung nach die BBQ Firewall!

Dieses Plugin ist extrem leicht aufgebaut und schützt deine Website vor diversen Angriffsvektoren wie SQL Injections, XSS, XXE, Directory traversal und vielem mehr.

Es basiert auf der 7G Firewall, welche ich unter dem Punkt .htaccess weiter unten vorstelle. Mit über 100,000 aktiven Installationen und 104 5-Sterne Bewertungen (von 106 insgesamt) ist es ein weit verbreitetes Plugin.

Du musst in der kostenfreien Version nichts einrichten. Das Plugin läuft Plug & Play like. Also einfach installieren, aktivieren und fertig!

REST-API!

Die WordPress REST-API ist eine theoretisch nützliche Schnittstelle, über die man von außen mit der Datenbank von der WordPress-Website kommunizieren kann. Das hat natürlich in Einzelfällen seine Vorteile, meistens hat es allerdings eher Nachteile.

So ist die REST-API nicht nur ein häufiger Angriffspunkt für Hacker, sondern auch Content-Diebstahl wird oft über diese Schnittstelle vollzogen. Man kann ja schließlich ganze Posts darüber auslesen und als eigenen Content verkaufen. Natürlich geht das immer noch wenn man das manuell machen würde, allerdings ist die automatische Möglichkeit nach dem Deaktivieren der Funktion nicht mehr möglich!

 

Dafür kann man das Plugin Disable WP REST API von Jeff Starr nutzen. Die Schnittstelle wird nach der Aktivierung nur für Besucher ohne gültigen Login deaktiviert, sodass sie sonst weiter genutzt werden kann. Sollte ein Besucher nun versuchen über API Beiträge oder andere Sachen auszulesen, wird er von der im nächsten Bild zu sehenden Nachricht begrüßt.

Datenschutzgefahrenquelle – Kommentare & Co.

Mir tut das Wort Datenschutz inzwischen schon weh. Allerdings muss man darauf achten, also muss ich das Thema kurz anschneiden. Bei weit über 50,000 verschiedenen Plugins gibt es natürlich die ein oder andere Gefahrenquelle.

Finn Hillebrandt von BLOGMOJO hat in einer sehr detaillierten Liste über 300 wichtige Plugins in Bezug auf Datenschutz und DSGVO bewertet. Diese Liste ist meiner Meinung nach schon fast alles, was ihr braucht. Bevor ihr ein Plugin für eure WordPress Website installiert, schaut ihr am besten noch kurz in seine Liste und checkt den DSGVO Status.

Ein weiterer Punkt sind Kommentare. WordPress speichert standardmäßig die IP eines Besuchers in der Datenbank, wenn er einen Kommentar hinterlässt. Das ist natürlich mit der aktuellen Datenschutzgrundverordnung nicht zu vereinbaren.

Da kann ich aber schnell Abhilfe schaffen. Wir müssen als Erstes im WordPress Admin Panel zum Menüpunkt Design -> Theme-Editor navigieren. Solltet ihr das noch nie gemacht haben, erwartet euch eine Warnmeldung von WordPress.

Du scheinst im WordPress-Dashboard direkte Änderungen an deinem Theme vorzunehmen. Wir empfehlen, das nicht zu tun! Wenn du dein Theme direkt bearbeitest, kann dies zu Fehlern auf deiner Website führen, außerdem können deine Änderungen bei zukünftigen Updates verloren gehen.

Theoretisch haben sie damit auch recht, allerdings garantiere ich dir, dass mit der aktuellen Version 5.8 nichts verloren gehen wird, oder auf deiner Website ein Fehler auftritt. Wir navigieren anschließend in die Datei für Theme-Funktionen mit dem Namen functions.php (zu sehen in der rechten Sidebar).

Dort geht ihr jetzt ganz nach unten und fügt 1 bis 2 Zeilenumbrüche ein. Anschließend folgt dieser Code.

// IPs der Kommentare entfernen
function wp_remove_ip_from_comments( $comment_author_ip ) {
	return '127.0.0.1';
}
add_filter( 'pre_comment_user_ip', 'wp_remove_ip_from_comments' );

Mit diesem Code wird im Falle eines neuen Kommentars nicht die richtige IP des Nutzers in der Datenbank gespeichert, sondern die IP 127.0.0.1 (localhost). Theoretisch kann man hier auch einfach keine IP eintragen.

SSL / TLS

Kommen wir zum letzten Punkt von WordPress. Das Thema SSL-Zertifikat kann man natürlich auch auf jede andere Website übertragen. SSL ist ein Verschlüsselungsprotokoll zur sicheren Datenübertragung im Internet.

Jede Website sollte inzwischen ein SSL-Zertifikat verwenden. Das hat nicht nur in der Sicherheit diverse Vorteile, sondern stärkt auch das Uservertrauen und laut Google belohnt die Suchmaschine einen auch mit besseren Rankings!

Natürlich setzt auch KRServers auf beste SSL-Verschlüsselung um die Datensicherheit seiner Kunden im höchsten Maße zu schützen.

Ich finde, dass wir uns nun genug um WordPress gekümmert haben. Schauen wir uns einmal weitere Sicherheitsaspekte von Webseiten an und wechseln in die sichere Programmierung!

Sichere Programmierung

Nachdem wir uns um WordPress gekümmert haben, schauen wir uns Webseiten an, welche nicht mit einem CMS realisiert wurden. Der wichtigste und offensichtlichste Punkt sollte die sichere Programmierung sein.

Wenn deine Website komplett selbstgeschrieben wurde, muss man besonderen Wert auf den Source-Code einer Website legen. Grundsätzlich gilt Folgendes. Je mehr Funktionen, je aufwändiger das Design, desto mehr Source-Code gibt es und desto öfter haben sich potentielle Sicherheitslücken eingeschlichen.

Sobald man nicht mehr auf reines HTML und CSS setzt, sondern weitere Sprachen wie PHP oder JavaScript einbaut, um mehr Funktionalität zu gewährleisten, haben Hacker Möglichkeiten nach Schwachstellen in der Programmierweise zu suchen.

Durch diese Schwachstellen könnten sie auf Serverdateien und Datenbanken zugreifen, die Seite optisch verändern, Kundendaten stehlen und mehr! Aus diesem Grund schauen wir uns jetzt ein paar Beispiele an, wie man sicherer Programmieren kann.

Usereingaben behandeln

Bei Usereingaben gibt es einen Grundsatz. Vertrauen ist gut, Kontrolle ist besser! Usereingaben sollten immer behandelt und entschärft werden. Das kann man je nach Zweck und Funktionsweise des Codes unterschiedlich handhaben.

Generell sollte man wo es zu einer Verbindung zur Datenbank kommt immer mit Prepared Statements arbeiten. Ich werde hier nicht tief in das Thema eintauchen, allerdings sind Prepared Statements das A & O, wenn es um Programmierung mit Datenbankverbindung geht.

Grundsätzlich bieten dir diese vorbereiteten Statements diverse Vorteile wie sauberer Code, teilweise Performanceverbesserungen und sie sind, solange sie komplett intern erstellt werden, absolut sicher.

Die Usereingaben werden nicht direkt übermittelt, sondern per Platzhalter (?) weitergeschickt. Dadurch weist du die Datenbank an, die an die Platzhalter gebundenen Variablen nicht als SQL-Befehle zu interpretieren, sondern als reine Angaben zu behandeln.

Dadurch verhinderst du sehr effektiv SQL Injections und damit zum Beispiel den Abfluss von Kundendaten oder das Umgehen eines Logins. Für euch gibt es jetzt noch einen kleinen Beispielcode. Dieser Code soll einen Teil eines User-Logins simulieren.

<?php

	$host 		= "localhost";
	$user 		= "root";
	$passwort 	= "";
	$dbname 	= "krservers_db";

	$con = mysqli_connect( $host, $user, $passwort, $dbname );

	if ( !$con ) {
   		die( "Keine Verbindung: " . mysqli_connect_error() );
	}

	$sql	= "SELECT * FROM users WHERE username = ? AND password = ?";
	$stmt 	= $con -> prepare( $sql );
	$stmt 	= bind_param( "ss", $username, $password );
	$stmt -> execute();

?>

Wie man erkennen kann bauen wir eine Verbindung zu unserer Datenbank auf und das SQL Statement wird nicht mit den Usereingaben gefüttert, sondern mit Fragezeichen als Platzhaltern. Später werden die Usereingaben, also der Benutzername und das Passwort als Strings an die Platzhalter gebunden und das Statement ausgeführt.

Aber wie sieht es mit anderen Usereingaben aus? Schließlich besteht die Welt des Hackens nicht nur als SQL Injections. Eine weitere und weit verbreitete Möglichkeit ist das Cross-Site-Scripting. Mittels Cross-Site-Scripting oder auch kurz XSS genannt, kann man im Prinzip alles machen, was man sich nur vorstellen kann.

Ich habe auch für das Cross-Site-Scripting etwas vorbereitet. Eine einfache Ausgabe einer vermeintlichen Usereingabe über ein Formular. Wie wir im Bild sehen können, wurde hier kein Name oder etwas anderes im Formular eingegeben, sondern ein Code der auch als solcher interpretiert wurde.

 

Durch das verwenden diverse Funktionen wie htmlspecialchars oder strip_tags wird solcher Code nicht interpretiert (wie im Beispiel zu sehen) oder direkt entfernt. Auch bietet preg_replace eine Lösung, die man nutzen kann, sofern man nur nach bestimmten Ausdrücken suchen möchte.

Sofern ihr keinen besonderen Grund habt das nicht zu tun, würde ich euch raten immer auf htmlspecialchars zu setzen, da alles andere zum Beispiel über Null Bytes und andere Mittel fast immer umgangen werden kann.

Weitere elementare Dinge auf die ihr achten müsst wäre die korrekte Einbindung von Dateien und das Prüfen von Dateien bei einer Uploadfunktion.

Ich hoffe, dass ich euch mit dieser kleinen Einweisung einen kleinen Eindruck von sicherer Programmierung vermitteln konnte.

Solltet ihr davon noch nie gehört haben und eure Website ist nicht über ein CMS wie WordPress realisiert und bietet eine Suchfunktion, einen Mitgliederbereich oder ähnliches an, dann habt ihr jetzt leider noch einiges an Arbeit vor euch!

Impressum / Datenschutzerklärung / Cookies

Die meisten denken bei dem Wort Sicherheit wahrscheinlich nur an Hacking. Allerdings muss man sich nicht nur gegen Hacker absichern, sondern auch die rechtlichen Aspekte berücksichtigen.

Fast alle Betreiber einer Website unterliegen der Impressumspflicht, welche im Telemediengesetz festgelegt wurde. Ausschließlich Webseiten zu persönlichen oder familiären Zwecken fallen nicht unter diese Pflicht. Das ist allerdings bei nur sehr wenigen Seiten der Fall. Alleine wenn man auf einem persönlichen Blog Werbung schaltet oder Affiliate-Links einbindet, kann das schon die Impressumspflicht auf den Plan rufen.

Im Impressum müssen je nach Rechtsform des Betreibers unterschiedliche Daten angegeben sein. Dazu zählen unter anderem der volle Name des Betreibers, die komplette Anschrift des Betreibers, sowie Kontaktdaten (E-Mail und/oder Telefonnummer).

Rechtlich gesehen kann und werde ich natürlich keine genau Auskunft geben und ich übernehme keine Haftung im Falle eines Rechtsstreites. Genauere Informationen zum Impressum bekommt ihr auf der Seite des Bundesministerium der Justiz und für VerbraucherschutzApropos! Fehlt das Impressum, freut sich der Staat über bis zu 50 000 Euro!

Genauso wie man zu einem Impressum verpflichtet ist, wird einem eine Datenschutzerklärung vorgeschrieben. Spätestens mit dem Inkrafttreten der DSGVO wird man mit den Wörtern Datenschutz, Cookies und IP-Adressen vollgetextet.

Sobald sie personenbezogene Daten (gewollt/ungewollt) sammeln, sind sie zu einer Datenschutzerklärung verpflichtet. Der Zweck einer Datenschutzerklärung besteht darin, Ihre Benutzer darüber zu informieren, wie mit ihren Daten umgegangen wird.

Zu personenbezogenen Daten gehören unter anderem Namen, E-Mail-Adressen, Adressen, IP-Adressen, Fotos, Kontoinformationen und weitere Informationen.

Jetzt fragt ihr euch sicherlich Maurice und wo bekomme ich ein Impressum her und wie erstelle ich eine Datenschutzerklärung?. Zum Glück braucht es dafür keinen Anwalt für 50 Euro die Stunde, sondern 10 bis 20 Minuten eurer Zeit auf einer Webseite.

Zum Glück gibt es den Datenschutz-Generator.de Dienst von Dr. Thomas Schwenke! Ein Mann der Ehre, wenn ich das mal so sagen darf. Ich möchte gar nicht wissen, wie vielen Leuten er die Erstellung einer eigenen Website erleichtert hat.

Die Website bietet einen Datenschutzerklärungsgenerator, sowie einen Generator für ein Impressum. Ihr müsst die Generatoren nur noch mit euren Namen füttern, die richtigen Services/Dienste auswählen und das fertig generierte in eure Website einbauen.

Das Wort Cookies ist meiner Meinung nach eines der schlimmsten Schimpfwörter für Webseitenbetreiber der letzten Jahre. Sobald deine Website Cookies setzt, unterliegt man nicht nur dem Datenschutz, sondern muss auch noch mit einem Cookie Banner darauf hinweisen.

Auch diese Cookie-Banner haben diverse Vorgaben zu erfüllen. So darf es kein einfacher Banner oben oder unten sein, keiner unten links in der Ecke.

Er muss in der Mitte des Bildschirmes sein und sämtliche Userinteraktion mit der Seite verhindern. Erst wenn der Nutzer die Cookies akzeptiert, dürfen die für die Cookies verantwortlichen Scripts (Werbung, Analyse oder Ähnliches) nachgeladen werden.

Der Nutzer der Website muss die Möglichkeit besitzen die Cookies abzulehnen, sodass theoretisch nur die für die Website unverzichtbaren Cookies gespeichert werden. Teilweise kann man nämlich leider nicht auf Cookies verzichten.

Allzu sehr möchte ich dort aber auch nicht ins Detail gehen. Grundsätzlich gibt es verschiedene Möglichkeiten einen Cookie-Banner ordentlich umzusetzen. Für selbst programmierte Webseiten kann man auf den Cookiebot setzen, oder man programmiert einen Cookie-Banner selbst. Falls man auf WordPress setzt, empfehle ich euch Borlabs Cookie!

.htaccess

Mithilfe der Konfigurationsdatei .htaccess kann man auf den meisten Webservern Regeln für Besucher, Bots, Dateien, Verzeichnisse und mehr aufstellen.

Man kann Zugriffe auf Verzeichnisse und Dateien regeln, SEO-freundliche Umleitungen erstellen, ganze Bots ausschließen, nach bestimmten Ausdrücken oder IPs suchen und ausschließen und diverse weitere Aufgaben einstellen.

Ich möchte euch nun ein kleines und einfaches Beispiel geben. Standardmäßig sind über den Webserver 404 Fehlerseiten eingestellt, also eine Seite, die der Besucher sieht, sollte die von ihm angesteuerte Datei oder das Verzeichnis nicht vorhanden sein. Bei KRServers sieht dies so wie im unteren Bild aus.

 

Meistens sehen diese Seiten einfach nicht hübsch aus, geschweige denn, dass sie auf das Design der eigenen Website abgestimmt sind. Aus dem Grund erstellen viele Webseitenbetreiber eigene 404 Seiten. Über eine .htaccess Datei könnte ich jetzt mit einer einzigen Zeile auf diese Seite umleiten lassen. Das geht so.

# Das ist ein Kommentar zur Übersichtlichkeit (Eigene Fehlermeldung)
ErrorDocument 404 /pfad/404.html

Nun wie bereits gesagt, sind .htaccess Dateien auch sehr im Bereich der Sicherheit nützlich. Schauen wir uns mal ein Beispiel an. Wir haben bemerkt, dass unsere Website inzwischen regelmäßig von einem Bot und einem Hacker besucht wird. Wir konnten über Logfiles den Bot identifizieren und dem Hacker eine IP zuweisen, die sich aus einem uns unbekannten Grund über Tage nicht ändert.

Nun müssen wir eine .htaccess Datei erstellen und die IP 123.123.123.123 (unser identifizierter Hacker) sowie den Bot ChinaClaw ausschließen. Anschließend verhindern wir noch direkten Zugriff auf die .htaccess Datei sowie das Auflisten der Dateien im Verzeichnis, sofern nur das Verzeichnis selbst angesteuert wird.

# Hacker mit seiner IP ausschließen (per Komma trennen)
order allow,deny
deny from 123.123.123.123
allow from

# Bot sperren (bei mehreren Bots nach dem Namen ein [OR] anhängen
RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw
RewriteRule ^.* - [F,L]

# Kein Zugriff auf die .htaccess Datei
<Files .htaccess>
order allow,deny
deny from all
</Files>

# Keine Ordnerstruktur wird angezeigt
Options All -Indexes

Das ging doch einfacher als gedacht, oder? Gut das ist gelogen. .htaccess Dateien sind unübersichtlich und nicht immer wirklich einfach zu verstehen. Allerdings sind sie sehr wirkungsvoll und auch ein wichtiger Baustein für SEO. Dementsprechend lohnt sich die Arbeit.

Für den Fall der Fälle das ihr wirklich einen intensiven und umfangreichen Schutz mit einer .htaccess Datei einrichten wollt, so kann ich euch die 7G Firewall empfehlen! Diese 12 KB Open Source Firewall blockiert effektiv böswillige Anfragen, böse Bots, automatische Attacken und Spam. Sie ist die Basis vieler WordPress-Plugins und beschützt zehntausende, wenn nicht sogar hunderttausende Webseiten!

Backups

Backups sind inzwischen in der IT absolut unverzichtbar und die perfekte Lösung um großflächigen Datenverlust auszuschließen. Gerade in Zeiten von Ransomware sind Backups oft die einzige Lösung.

Allerdings gibt es gerade bei Webseiten und CMS Lösungen weitere Situationen die zum Datenverlust oder anderen Defekten führen können. Webseiten könnten gehackt werden und ein Update des CMS Core oder dessen Plugins und Themes könnte einen Defekt auslösen. Dementsprechend ist es notwendig regelmäßig Backups anzulegen.

Es gibt diverse Plugins mit denen man bei WordPress, Joomla und anderen CMS automatische Backups anlegen kann. Dies beeinträchtigt allerdings die Leistung und somit die Geschwindigkeit deiner Website.

KRServers hat eine elegantere Lösung dafür! Du kannst als Kunde ganz bequem über den Administrationsbereich den Backup-Manager nutzen, welchen du unter dem Menüpunkt Tools & Einstellungen findest.

 

Dort bekommst du nicht nur die Möglichkeit Backups manuell anzulegen und bestehende Backups zu verwalten, du kannst außerdem Backups vollautomatisch anlegen lassen, sodass für dich kaum ein Aufwand entsteht!

Ich empfehle dir im Falle einer CMS Installation wie WordPress ein Backup vor jedem Update, vor jeder Deinstallation eines Plugins / Themes, sowie mindestens ein wöchentliches Update.

Fazit

Das war jetzt ein ziemlich umfangreicher, aber auch hoffentlich nützlicher Beitrag zur Sicherheit von Websites. Ich hoffe, dass euch dieser Beitrag gefallen hat. Ich bedanke mich noch einmal bei Timo für die Möglichkeit hier einen Beitrag zu verfassen und wünsche euch noch einen angenehmen Tag!

Autor: Timo Kessel (ehemaliger Inhaber KRServers.de)

Schreibe einen Kommentar