Direkt zum Inhalt
Thomas Ziaja
Top 10 Security Tipps & Tricks für Entwickler (Drupal 8)

Wir möchten Ihnen in diesem Artikel zeigen, wie Sie mit einfachen Hilfsmitteln und “Gewohnheiten” Ihre Daten und Webseiten-Konfigurationen besser absichern.

Zudem benennen wir kurz, welche Mittel Drupal bereitstellt, um sich vor einem Webseiten-Hack so gut wie möglich zu schützen.

Inhalt:

  1. Aktualisierungen
  2. Nutzernamen und Passwörter
  3. Security Module
  4. Bots blockieren
  5. Sichere Verbindungen
  6. Datei-Berechtigungen
  7. Zugriff blockieren
  8. Datenbank-Tabellen Prefix
  9. SSL-Zertifikat
  10. Custom Code

    Fazit

1. Aktualisieren Sie den Drupal-Core und verwendete Module

Sowohl der Drupal-Core als auch alle Erweiterungen sollten aktuell gehalten werden. Hacker greifen gezielt ältere Versionen an, denn dort sind die Sicherheitsvorkehrungen und -standards eben nicht auf dem neuesten Stand. Deshalb gibt es u.a. regelmäßig Updates, die recht einfach zu erkennen und installieren sind.

Zusätzlich sollten Sie es sich zur Gewohnheit machen, regelmäßig Sicherungskopien (Backups) zu erstellen. Sollte allen Sicherheitsvorkehrungen zum Trotz eine Ihrer Seiten angegriffen werden, dann können Sie Ihre Daten aus dem Backup wiederherstellen.

2. Starke Passwörter, kluge Benutzernamen

Ein großer Teil von Angriffen auf eine Webseite ist auf schwache Logindaten zurückzuführen. Das ist Fakt.

Nehmen Sie sich hierfür Zeit. Ein Benutzername sollte nicht 'admin' o.ä. sein, denn Hacker greifen zuerst häufige und einfache Nutzernamen an.

Vermeiden Sie die Verwendung von zu einfachen, leicht merkbaren Passwörtern, denn leichtere Passwortstrukturen werden von Angriffsprogrammen schneller geknackt. Hierfür gibt es Programme, die starke Passwörter nach den gängigen Sicherheitskriterien erstellen. Es gibt aber auch online reichlich Anweisungen, wie ein sicheres Passwort auszusehen hat.

Außerdem haben wir bereits einen Artikel über die Erstellung von sicheren Passwörtern veröffentlicht, die trotz ihrer Komplexität leicht zu merken sind.

3. Security Module

Die Drupal Community weiß um die Wichtigkeit von Sicherheit der Daten und hat Sicherheitsmodule hervorgebracht, die Sie nutzen sollten! Es folgen ein paar Beispiele.

1. Login Security:

Um Angreifer zu verwirren, können mit diesem Modul Standard-Fehlermeldungen beim Login abgeschalten werden. So wird normalerweise angezeigt, ob ein Nutzername existiert. Mit dem Login Security Modul wird diese Fehlermeldung deaktiviert.

Sie finden alle weiteren Informationen zu dem Modul auf https://www.drupal.org/project/login_security

2. Password Policy:

Ein Weg der Angreifer, um auf Ihre Seite zu kommen, ist das Anlegen eines neuen Passworts für einen willkürlichen User. Dieses Modul hilft dabei, gewisse Vorgaben für das Anlegen eines Passwortes zu bestimmen. Als Beispiel:

Eine Uppercase Bedingung mit dem Wert 2 
und eine Digit Bedingung mit dem Wert 4

Dies hat zur Folge, dass ein neues Passwort mindestens 2 Großbuchstaben und 4 Ziffern beinhalten muss. Ansonsten wird das Passwort nicht angelegt.

Mehr Informationen finden Sie unter https://www.drupal.org/project/password_policy

3. Security Review

Gängige Sicherheitsrisikien werden hier automatisiert geprüft und per Farbensystem bewertet. Das erleichtert die Suche nach Fehlern und reduziert den Zeitaufwand dabei.

Dieses Modul kommt mit einigen Features, dabei unter anderem Ermittlung von Datei-Berechtigungen (siehe Punkt 6), fehlgeschlagenen Loginversuchen oder über die Sichtbarkeit von Fehlermeldungen.

Mehr Informationen zu diesem Modul finden Sie unter https://www.drupal.org/project/security_review

4. Two-factor Authentication (TFA)

Dieses Modul erweitert die gängige Authentifizierung per Benutzername und Password zusätzlich mit einem zweiten Schritt. Es wird z. B. ein Bestätigungs-Code an ein verifiziertes Endgerät übermittelt. Nur wenn Sie dieses Endgerät besitzen, können Sie diesen Code einsehen und mit der Authentifizierung fortfahren.

Weitere Informationen dazu finden Sie unter https://www.drupal.org/project/tfa

Obwohl manche dieser Module noch in der Entwicklungsphase sind, ist es ratsam, die Entwicklung zu verfolgen oder sogar probeweise eines oder mehrere zu installieren.

4. Schlechte Bots blockieren

Eine weitere Möglichkeit ist das manuelle Blockieren von bestimmten User Agents. Hierfür gibt es für Drupal 7 zahlreiche Module, eines davon ist Bad Behavior.

Es wird in Zukunft sicher für Drupal 8 Module dieser Art geben. Hier sei aber angemerkt, dass diese auf der S-Schicht agieren, d. h. nachdem der Request bereits den Server und die .htaccess file durchlaufen hat.

Dementsprechend ist es effektiver, Bot-Blockaden so früh wie möglich aufzubauen. Auf http://www.botreports.com/ gibt es eine Liste von bekannten Bots und deren User Agent String. Diesen könnte man bereits in der .htaccess file wie folgt blocken:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^.*(agent1|Wget|Catall Spider).*$ [NC]

RewriteRule .* - [F,L]

Wobei agent1, Wget und Catall Spider jeweils für einen Bot stehen.

Noch besser ist es aber, diese Filterung noch früher einzubauen. Das kann zum Beispiel auf einem Proxy-Server geschehen, wodurch den eigentlichen Web-Server bedeutend weniger verdächtige Requests erreichen. 

5. Sichere Verbindungen beim Deployment nutzen

Wenn Ihr Hoster es unterstützt, sollten Sie immer eine SFTP Verschlüsselung nutzen. Noch besser ist eine Secure Shell (ssh)-Verbindung.

Um den FTP-Client über SFTP laufen zu lassen, reicht es, den Port 22 einzutragen.

Achtung: Manche FTP-Clients speichern Passwörter auf Ihrem Rechner, manchmal sogar unverschlüsselt.

6. Datei-Berechtigungen

Jede Datei hat ihre eigene Berechtigung zum Lesen, Ausführen und Beschreiben. Zu lockere Berechtigungen können Türen für Eindringlinge öffnen, zu strikte hingegen können dazu führen, dass eine Drupalseite nicht läuft, denn verschiedene Dateien müssen für den Drupal Core oder für Module zugänglich sein.

Eine gute Dokumentation zu den Berechtigungseinstellungen gibt es hier: https://www.drupal.org/node/244924

7. Zugriff blockieren

Für wichtige Dateien wie authorize.php, upgrade.php, cron.php oder install.php kann der Zugriff generell in der .htaccess blockiert werden. Das sieht dann so aus:

<FilesMatch "(authorize|cron|install|upgrade)\.php">

Order deny, allow

deny from all

Allow from 127.0.0.1

</FilesMatch>

Dies bewirkt, dass nur Sie diese Dateien einsehen und ausführen dürfen.

8. Datenbank Tabellen prefix

Ein weiterer Weg, die Sicherheit Ihrer Seite zu erhöhen, ist das Definieren von Tabellen-Prefixen. Somit hieße die Tabelle 'node' dann 'prefix_node' und der Zugang für Eindringlinge ist sofort erschwert. Denn unkonventionelle Tabellennamen sind schwer zu erraten. Solche Prefixe sind bei der Erstellung der Seite oder auch im Nachhinein über ein geeignetes Datenbank Tool hinzuzufügen.

9. SSL Zertifikat

Wenn Ihre Seite nicht über HTTPS läuft, werden Ihr Benutzername und Ihr Passwort als Text über das Internet versendet und können von jedem abgefangen werden.

Darum sollten Sie in jedem Fall ein SSL Zertifikat nutzen. Das hat zusätzlich noch SEO-Vorteile und vermittelt Ihren Besuchern Sicherheit.

10.Custom Code

Beim Programmieren führen bekanntlich viele Wege ans Ziel. Jedoch sind bezüglich der Sicherheit Coding Standards unbedingt zu beachten:

1. Nutzen Sie die Drupal API!

Beispielsweise können Sie den aktuellen Benutzernamen String per globaler PHP-Variable $_GET['user'] auslesen. Dieser wird nicht maskiert ('escaped') und geht somit als Klartext von Browser zu Server und umgekehrt. Dies vereinfacht Cross Site Scripting (XSS).

Per Drupal 8 API ginge das wie folgt:

$current_user = Drupal::currentUser();

$user_name = $$current_user->getDisplayName();

Es wird zunächst das User-Objekt angefordert, was mit zusätzlichen Methoden wie eben getDisplayName() alle möglichen Informationen bereitstellt. Wichtig aber ist der Unterschied, dass hier alle Strings maskiert und somit nicht als Klartext versendet werden.

Diese Methodik der Text-Maskierung ist seit Drupal 8 ein klarer Standard.

Für jegliche Ausgaben werden zum Beispiel Twig Templates genutzt. Diese maskieren grundsätzlich alles, was sich innerhalb der geschweiften Klammern "{{ }}" befindet.

In PHP erzeugter Text kann ebenfalls per API maskiert werden:

Html::escape($text)

2. Database abstraction layer

Direkte Datenbankabfragen wie db_query('SELECT foo FROM {table} t WHERE t.name = $user_name); sind zu vermeiden. Hier werden sensible Daten ungesichert übermittelt.

Der Database abstraction layer ersetzt diese durch einfache Placeholder, die nicht direkt zu den Daten zeigen:

db_query("SELECT foo FROM {table} t WHERE t.name = :name", [':name' => $user_name]);

Grundsätzlich ist es hier ebenfalls besser, die Drupal API zu nutzen. Das geschieht, indem ein "database connection object" angefordert und darauf die Abfrage angewendet wird:

$connection = Database::getConnection();

$connection->select({table}, 't')

->fields('gs', ['foo'])

->condition('name', $user, '=')

Fazit

Wie oben schon kurz angerissen, geschehen die meisten erfolgreichen Angriffe auf Internetseiten aufgrund von zu fahrlässigem Umgang mit den eigenen Daten. Sei es, weil sich Webseitenbetreiber nicht als Ziel von Angriffen sehen, oder den Aufwand für Sicherheitsvorkehrungen höher als das tatsächliche Risiko eines Angriffs selbst einschätzen.

Nun, das ist falsch.

Es gibt zahlreiche Angriffsmethoden und -mechanismen. Ein "Bot" entscheidet nicht, wen er angreift. Somit kann es jede Seite treffen.

Wir hoffen, diese kurze Ausführung über die Verfahren zur Steigerung der Sicherheit Ihrer Seite hilft Ihnen bei zukünftigen Entscheidungen über den Aufwand, den Sie hierfür betreiben möchten und wünschen Ihnen viel Erfolg beim Absichern.

Sollten Sie Fragen zu der Sicherheit Ihrer Drupal-Webseite haben, zögern Sie nicht, uns anzurufen: 0711 - 633 779 60