Grundlagen: die Webseite vor Hackern schützen

 

Ihre Urlaubsfotos interessieren keinen Einbrecher. Ihr Webspace dagegen schon, denn auf ihm lassen sich Spam-Mails verschicken, gefälschte Bankseiten ablegen oder fremde Dateien parken. Angegriffen wird eine kleine Galerie deshalb nicht gezielt, sondern von Programmen, die rund um die Uhr Tausende Adressen abklappern und überall an denselben Türen rütteln: an der Anmeldung, am Upload-Formular und an Dateien, die versehentlich offen liegen. Wer die eigene Webseite vor Hackern schützen will, braucht also keine Festung. Es reicht, genau diese Türen zu verschließen und den eigenen Rechner sauber zu halten.

Grundlagen zum Schutz vor Hackern: Website-Fenster mit Schutzschild und Vorhängeschloss, maskierter Eindringling wendet sich ab

Was ein Angreifer bei einer Galerie sucht

Im Zugriffsprotokoll Ihres Webhosters stehen fast immer Abrufe von Adressen wie wp-login.php oder phpmyadmin/, obwohl Sie weder WordPress noch eine offene Datenbankoberfläche betreiben. Das sind die Suchprogramme bei der Arbeit: Sie probieren bekannte Pfade durch und merken sich jede Adresse, die anders antwortet als mit „nicht gefunden“. Bei einer Bildergalerie gibt es vier solcher Türen:

  • Die Anmeldeseite: Ein Programm probiert Benutzernamen und Passwörter aus langen Listen, bis ein Paar passt.
  • Das Upload-Formular: Statt eines Fotos landet eine PHP-Datei auf dem Server. Lässt sie sich im Browser aufrufen, führt der Server sie aus, und der Angreifer hat eine Hintertür.
  • Offen liegende Dateien: Eine Sicherungskopie config.php.bak im Webspace oder ein vergessener Installationsordner verraten Zugangsdaten oder erlauben eine zweite Installation.
  • Der eigene Rechner: Viele FTP-Programme speichern das Passwort. Stiehlt Schadsoftware es von Ihrem PC, braucht niemand mehr die Anmeldeseite der Galerie.

Gegen die letzte Tür hilft kein Script, sondern ein Rechner mit aktuellen Updates und ein FTP-Programm, das verschlüsselt über SFTP oder FTPS verbindet. Mit einfachem FTP geht das Passwort bei jeder Verbindung lesbar durchs Netz.

Was das Bildergalerie-Script von sich aus abwehrt

Gegen die ersten beiden Türen müssen Sie nichts einrichten, die Abwehr steckt im Script. Wie gut sie ist, hängt allerdings von der Version ab. Zwischen 3.10 vom November 2023 und 3.15 vom September 2026 wurde keine Version an Kunden ausgeliefert, 3.11 bis 3.14 waren interne Zwischenstände. Zeigt Ihre Verwaltung noch 3.10 an, fehlt Ihnen alles in der rechten Spalte:

AngriffVersion 3.10Version 3.15
Passwort erratenSperre nur je IP, Adresse fälschbar (X-Forwarded-For)Sperre je IP oder Benutzername, echte Verbindungsadresse
Benutzernamen ausprobierenMeldung „nicht bekannt“ verrät falsche Namenimmer „Benutzername oder Passwort ist falsch.“
Gestohlene Passwort-HashesMD5 ohne Zufallszusatzbcrypt, Umstellung bei der Anmeldung
Untergeschobene AktionenLöschen per einfachem LinkRückfrage und Sicherheitstoken
SQL-InjectionEingaben maskiert in die Abfrage eingebautPrepared Statements
Skript als Bild getarntTypangabe des BrowsersPrüfung am Dateiinhalt, Endung nach erkanntem Typ
Skripte im Bilderordnerkeine Sperrebilder/.htaccess schaltet PHP ab
Übernommene SitzungPasswort im Klartext in der Sitzungkein Passwort, Abmeldung nach 60 Minuten Leerlauf

Zwei Zeilen brauchen eine Erklärung. Gegen MD5-Werte aus einer erbeuteten Tabelle admin lassen sich Milliarden Kandidaten pro Sekunde prüfen, bcrypt dagegen ist absichtlich langsam und gibt jedem Passwort einen eigenen Zufallswert. Prepared Statements schicken Abfrage und Eingabe getrennt an die Datenbank, sodass eine Eingabe nie Teil des Befehls wird.

Beim Upload zählt der Inhalt, nicht der Name. Eine shell.php, die innen wie ein GIF aufgebaut ist, speichert das Script als shell-php.gif, und der Webserver liefert sie nur als Bild aus. Gelangt eine Skriptdatei auf anderem Weg in bilder/, etwa per FTP, verhindert die .htaccess dort, dass der Server sie ausführt.

Das Sicherheitstoken wehrt einen Angriff ab, den viele nicht kennen. Sie sind in der Verwaltung angemeldet und öffnen nebenher eine präparierte fremde Seite. Diese Seite versucht, unter Ihrer Anmeldung eine Kategorie zu löschen. Unter 3.10 genügte dafür der Aufruf des Löschlinks. Unter 3.15 fehlt der Anfrage das Token aus dem echten Formular, und die Galerie antwortet mit „Sicherheitstoken ungültig. Die Kategorie wurde nicht gelöscht.“

Bei einer config.php.bak im Hauptverzeichnis greift dagegen keine Regel des Scripts: Der Webserver liefert sie samt Datenbank-Passwort als Text aus. Das Diagramm spielt alle vier Fälle durch, die letzte Zeile zeigt denselben Abruf, nachdem Sie die Kopie vom Server gelöscht haben.

Animiertes Diagramm: nach 5 Fehlversuchen je IP oder Name ist die Anmeldung bis zu 5 Minuten gesperrt, shell.php wird als shell-php.gif gespeichert, ein fremder Löschbefehl ohne Token wird abgewiesen, eine config.php.bak zeigt das DB-Passwort, bis Sie sie löschen
Anmeldesperre, Typprüfung und Sicherheitstoken stoppen drei Angriffe. Gegen die liegen gelassene config.php.bak hilft nur, sie vom Server zu löschen und Sicherungen auf dem eigenen Rechner aufzubewahren.

Weitere Sperren arbeiten im Hintergrund: Die Ordner cache/, inc/, class/ und tpl/ weisen per .htaccess jeden Abruf aus dem Browser ab, und neue Kategorieordner bekommen eine .htaccess und eine leere index.html, damit niemand ihren Inhalt als Liste sieht. Diese Regeln wertet allerdings nur Apache aus, dazu kompatible Server wie LiteSpeed. Unter nginx gehören die Sperren in die Serverkonfiguration. Welcher Webserver läuft, verrät der Support Ihres Hosters.

Wie lange die Anmeldesperre dauert

Die Anmeldesperre hat keine feste Laufzeit, sie arbeitet mit einem gleitenden Fenster. Bei jedem Anmeldeversuch zählt das Script die Fehlversuche der letzten 300 Sekunden, getrennt für die IP-Adresse und für den Benutzernamen. Sind es fünf, weist es den Versuch ab, selbst wenn das Passwort diesmal stimmt. Frei wird die Anmeldung, sobald der älteste der fünf Fehlversuche aus dem Fenster fällt. Das Diagramm zeigt zwei Fälle mit demselben Ende:

Animiertes Zeitleisten-Diagramm: fünf Fehlversuche von 0:00 bis 4:00 sperren die Anmeldung 1 Minute, fünf Fehlversuche in 40 Sekunden sperren sie 4 Minuten 20 Sekunden, frei ist sie in beiden Fällen um 5:00
Gezählt werden nur die Fehlversuche der letzten 300 Sekunden: Die Anmeldung wird frei, sobald der älteste der fünf aus diesem Fenster fällt.

Verteilt jemand seine fünf Versuche über vier Minuten (Fall A), dauert die Sperre nur eine Minute. Schickt ein Programm alle fünf innerhalb von 40 Sekunden ab (Fall B), bleibt die Anmeldung 4 Minuten und 20 Sekunden zu. Die Meldung auf der Anmeldeseite nennt trotzdem pauschal den Höchstwert: „Zu viele fehlgeschlagene Anmeldeversuche. Der Zugang ist für 5 Minuten gesperrt.“ Ein neuer Versuch kann durchaus früher klappen. Versuche während der Sperre, wie der um 4:30 in Fall A, landen als „Zugang gesperrt“ im Systemprotokoll und zählen nicht als neuer Fehlversuch. Stures Weiterprobieren verlängert die Sperre also nicht.

Die Webseite vor Hackern schützen: Ihre vier Aufgaben

Eine Zwei-Faktor-Anmeldung, eine eigene Umleitung auf HTTPS und einen Virenscan hochgeladener Dateien bietet das Script nicht. Die übrigen Schutzmaßnahmen erledigen Sie selbst, im FTP-Programm und im Kundenmenü des Webhosters. Die Reihenfolge richtet sich nach dem Aufwand des Angreifers: Vorn steht, was ein Suchprogramm ganz ohne Passwort ausnutzen kann, hinten, was erst nach einem Passwortverlust schadet.

1. Script und PHP aktuell halten

Ist eine Lücke öffentlich beschrieben, suchen die Programme gezielt nach Installationen mit der alten Version. Zum Update gehört die PHP-Version beim Webhoster: Erhält eine PHP-Reihe keine Korrekturen mehr, bleiben ihre Lücken offen. Das Bildergalerie-Script 3.15 läuft unter PHP 8.2 bis 8.5. Beim Sprung von 3.10 auf 3.15 verdienen drei Stellen besondere Aufmerksamkeit:

  • Schutzabfrage in inc/config.php: Sie sollte den direkten Aufruf der Datei verhindern, griff in 3.10 wegen vertauschter Argumente aber nie. Weil ein Update Ihre inc/config.php nicht überschreibt, ersetzen Sie den Block selbst.
  • Die Datei bilder/.htaccess: Manche FTP-Programme blenden Dateien mit einem Punkt am Anfang aus, dann fehlt sie unbemerkt auf dem Server.
  • Der Ordner install/: Solange er existiert, sperrt die Galerie ihre Verwaltung mit Absicht. Nach dem Update löschen Sie ihn.

Den vollständigen Ablauf mit Sicherung vorab beschreibt die Anleitung Script aktualisieren. Um die Passwörter müssen Sie sich dabei nicht kümmern: Das alte MD5-Passwort stellt die Galerie bei der ersten Anmeldung selbst auf bcrypt um.

2. Den Webspace aufräumen

Kopien wie config.php.bak, ein hochgeladenes ZIP-Archiv der Galerie oder ein Datenbank-Export gehören auf Ihren Rechner. Im Hauptverzeichnis kann sie jeder abrufen, der den Namen errät, und Namen wie backup.zip stehen in jeder Suchliste.

3. Das Paket beim Webhoster einstellen

Einige Schutzmaßnahmen liegen außerhalb der Galerie. Sie setzen sie im Kundenmenü oder lassen sie sich vom Support bestätigen:

  • HTTPS: Die Galerie ist über https:// erreichbar, und der Hoster leitet http:// dorthin um. Ohne Verschlüsselung kann im offenen WLAN eines Cafés jemand Ihr Passwort mitlesen.
  • Fehlermeldungen: display_errors ist ausgeschaltet, damit Besucher keine Serverpfade oder Datenbankdetails zu sehen bekommen.
  • Datenbank-Benutzer: Die Galerie hat einen eigenen Benutzer, der nur ihre Datenbank erreicht. Gerät das Passwort aus inc/config.php in falsche Hände, bleiben andere Datenbanken im selben Paket verschlossen.

4. Ein eigenes Passwort je Zugang

Zu einer selbst betriebenen Galerie gehören mindestens vier Zugänge: Verwaltung, Datenbank, FTP und das Kundenmenü des Webhosters. Jeder geht auf einem anderen Weg verloren, das Datenbank-Passwort etwa mit einer Kopie von inc/config.php. Haben alle vier dasselbe Passwort, öffnet ein einziger Verlust alles.

Wichtiger als Sonderzeichen ist, dass ein Passwort in keiner Liste steht. Die Anmeldesperre lässt höchstens fünf Fehlversuche in 300 Sekunden zu. Für einen Benutzernamen sind das rund 1.440 am Tag, egal von wie vielen Rechnern aus geraten wird. Das reicht nicht für ein zufälliges Passwort, aber locker für „Sommer2024“, „Galerie123“ oder den Namen des Hundes. Drei oder vier zufällig gewählte Wörter stehen in keiner Liste und lassen sich trotzdem merken. Das Script verlangt für neue Passwörter mindestens 8 Zeichen, schreibt aber keine Ziffern oder Sonderzeichen vor. Wie Sie so ein Passwort bauen, zeigt die Anleitung zum sicheren Passwort.

Auch der Benutzername zählt. Weil die Sperre je Benutzername greift, hat sie eine Kehrseite: Wer Ihren Namen kennt, kann Sie mit fünf falschen Passwörtern immer wieder für bis zu fünf Minuten aussperren. Ein Name, der nicht „admin“ lautet und nirgends auf der Galerie zu lesen ist, nimmt ihm diese Möglichkeit.

Alle vier Punkte lassen sich gefahrlos an einer Testinstallation durchspielen, bevor die echte Galerie online geht. Das Bildergalerie-Script können Sie dafür kostenlos herunterladen.

Einen Einbruch früh erkennen

Ein Eindringling, der den Server weiter nutzen will, verhält sich unauffällig. Die erste Stelle zum Nachsehen ist das „Systemprotokoll“ der Verwaltung. Es führt Anmeldungen und Änderungen mit Zeit, Benutzer und IP-Adresse auf. Viele Zeilen „Anmeldung fehlgeschlagen: Benutzername unbekannt“ und ab und zu „Zugang gesperrt“ sind normal, die Sperre arbeitet. Hellhörig werden sollten Sie bei „Anmeldung erfolgreich“ zu einer Zeit, in der Sie nicht angemeldet waren, und bei „Passwort geändert“, ohne dass Sie es geändert haben.

Außerhalb des Protokolls sind das ernste Warnzeichen:

  • Fremde Datei: In bilder/ oder einem Unterordner liegt eine Datei, die kein Foto ist, etwa mit der Endung .php. Dorthin gehören nur Ihre Fotos, die Kopien in bilder/tn/ und die Schutzdateien index.html und .htaccess.
  • Post vom Hoster: Ihr Webhoster meldet, dass von Ihrem Paket aus Mails verschickt werden.
  • Unbekanntes Konto: In der Tabelle admin steht ein Administrator, den Sie nicht angelegt haben.

Prüfen Sie das einmal im Monat, am einfachsten zusammen mit der Datensicherung. Fünf Minuten genügen: das Protokoll überfliegen, im FTP-Programm bilder/ samt Unterordnern nach fremden Endungen absuchen, die Startseite auf dem Handy aufrufen.

Häufige Fragen

Komme ich ohne Programmierkenntnisse aus?

Ja. Sie brauchen zwei Werkzeuge: das FTP-Programm für Updates und das Aufräumen, das Kundenmenü des Hosters für HTTPS, PHP-Version und Passwörter. Code begegnet Ihnen nur beim Update auf 3.15 im Block in inc/config.php, und den ersetzen Sie per Kopieren und Einfügen aus der Update-Anleitung.

Gibt es eine Zwei-Faktor-Anmeldung für die Verwaltung?

Nein, einen Einmalcode vom Handy kennt das Script nicht. Viele Hoster bieten im Kundenmenü aber einen „Verzeichnisschutz“ für den Ordner admin/: Der Browser fragt dann vor der Galerie-Anmeldung nach einem weiteren Benutzernamen und Passwort. Das ist kein zweiter Faktor, hält automatische Rateversuche aber von der Anmeldeseite fern. Wählen Sie dafür ein anderes Passwort als für die Galerie.

Übernimmt der Webhoster die Absicherung?

Nur zum Teil. Der Hoster hält Betriebssystem und Webserver aktuell und stellt PHP-Versionen und meist ein kostenloses Zertifikat bereit. Was in Ihrem Webspace liegt, sieht er sich nicht an: welche Script-Version Sie betreiben, wie stark Ihr Passwort ist oder ob eine config.php.bak herumliegt. Fragen Sie ihn aber, wie lange er Sicherungen aufbewahrt, falls ein Einbruch erst nach Wochen auffällt.

Was tue ich, wenn ich einen Einbruch vermute?

Sichern Sie zuerst den Zustand: Webspace, Systemprotokoll und die Zugriffsprotokolle des Hosters. Ändern Sie dann Admin-, Datenbank- und FTP-Passwort von einem Rechner, dem Sie trauen, und tragen Sie das neue Datenbank-Passwort in inc/config.php ein. Spielen Sie die Script-Dateien aus einem frischen Download neu ein, entfernen Sie fremde Dateien aus bilder/ und prüfen Sie, ob in der Tabelle admin nur Ihre eigenen Konten stehen.

Verwandte Themen

Passwort, Update, Sicherung und .htaccess erklären diese Artikel ausführlicher: