This page has been robot translated, sorry for typos if any. Original content here.

Allgemeine Schutzempfehlungen

Jeder, der MySQL (oder einen anderen SQL-Server) auf einem mit dem Internet verbundenen Computer verwendet, sollte diese Beratung lesen, um häufige Sicherheitsprobleme zu vermeiden.

Es muss jedoch betont werden, wie wichtig es ist, den Server (nicht nur den MySQL- Server) vollständig vor allen Arten von Angriffen zu schützen. In diesem Artikel ist es leider nicht möglich, alle Aspekte von Sicherheitsproblemen abzudecken. Die wichtigsten Probleme werden jedoch als vollständig betrachtet.

MySQL verwendet auf Access Control Lists ( ACLs ) basierende Sicherheit für alle Verbindungen, Abfragen und andere Vorgänge, die ein Benutzer ausführen kann. Es gibt auch Unterstützung für SSL- verschlüsselte Verbindungen zwischen MySQL- Clients und -Servern. Viele der in diesem Artikel behandelten Konzepte sind nicht spezifisch für MySQL und können auf alle Anwendungen angewendet werden.

Wenn MySQL ausgeführt wird , beachten Sie folgende Richtlinien:

Geben Sie niemandem (außer dem MySQL- Administrator) Zugriff auf die USER- Tabelle in der MySQL-Datenbank . Das verschlüsselte Passwort ist das echte Passwort in MySQL . Wenn Sie das in der USER-Tabelle für diesen Benutzer aufgeführte Kennwort kennen, können Sie sich leicht als dieser Benutzer anmelden, wenn Sie Zugriff auf den für dieses Konto aufgelisteten Computer haben.

Untersuchen Sie das MySQL- Zugriffsberechtigungssystem. Mit den Befehlen GRANT und REVOKE wird der Zugriff auf MySQL gesteuert. Erteilen Sie nicht mehr Privilegien als nötig. Gewähren Sie niemals allen Computern in einem Netzwerk Berechtigungen. Inspektionsbefehle:

1. Versuchen Sie mysql -u root . Wenn Sie eine Verbindung mit dem Server herstellen können, ohne nach einem Kennwort zu fragen, liegt ein Problem vor. Jeder kann sich als MySQL- Root-Benutzer mit vollen Berechtigungen mit Ihrem MySQL-Server verbinden. Lesen Sie die MySQL-Installationsbefehle sorgfältig durch und beachten Sie die Optionen für die Passworteinstellung.

2. Verwenden Sie die SHOW GRANTS und überprüfen Sie die Befehle, um zu sehen, wer Zugriff auf welche hat. Entfernen Sie redundante Berechtigungen mit dem Befehl REVOKE.

Speichern Sie Kennwörter nicht in Klartext in Ihrer Datenbank. Wenn Ihr Computer gehackt wird, kann der Eindringling eine vollständige Liste erhalten.

Passwörter und verwenden Sie sie. Verwenden Sie stattdessen den MD5-Algorithmus oder eine andere Einweg-Hash-Funktion.

Kennwörter nicht aus Wörterbüchern auswählen. Es gibt spezielle Programme, um sie abzuholen. Sogar Passwörter wie "xfish98" sind sehr schlecht. Viel besser ist duag98, das dasselbe Wort fish enthält, aber nur eine Taste auf der Tastatur eingetippt hat. Eine andere Methode ist die Verwendung von Passwörtern wie UMBR, die aus den ersten Wörtern im Satz Mary bestehen Es gab ein großes Kind. "Solche Passwörter sind leicht zu merken und einzugeben, für einen Angreifer ist es jedoch schwierig, sie zu erfassen.

Firewall verwenden. Sie schützt Sie vor mindestens 50% der ausgenutzten Schwachstellen in jeder Software. MySQL verwendet standardmäßig den Port 3306. Auf diesen Port sollte nur von vertrauenswürdigen Computern aus zugegriffen werden. Der einfachste Weg, um zu prüfen, ob Ihr MySQL-Port geöffnet ist, besteht darin, den folgenden Befehl von einem entfernten Rechner aus auszuführen, wobei server_host der Hostname Ihres MySQL-Servers ist: telnet server_host 3306

Vertrauen Sie nicht auf von Benutzern eingegebene Daten. Sie können Ihren Code täuschen, indem Sie Sonderzeichen in ein Webformular oder eine URL eingeben. Stellen Sie sicher, dass Ihre Anwendung sicher bleibt, wenn der Benutzer Folgendes eingibt: DROP DATABASE mysql;. Dies ist ein wichtiges Beispiel, jedoch können viele Sicherheitslücken und Datenverluste auftreten, wenn Hacker ähnliche Methoden verwenden. Vergessen Sie auch nicht, die numerischen Daten zu überprüfen. Ein häufiger Fehler besteht darin, nur Strings zu schützen. Manchmal glauben die Leute, dass eine Datenbank, die nur öffentlich verfügbare Daten enthält, nicht geschützt werden sollte. Das ist nicht richtig. Zumindest kann ein DoS-Angriff gegen solche Datenbanken durchgeführt werden. Der einfachste Schutz vor dieser Art von Angriff besteht in der Verwendung von Apostrophen um numerische Konstanten:

SELECT * FROM-Tabelle WHERE ID = '234' . MySQL konvertiert diesen String automatisch in eine Zahl und entfernt alle nicht numerischen Zeichen in der Abfrage. Überprüfung:

Alle Webanwendungen:

1. Versuchen Sie, ' ' ' ' '' 'in Ihre Webformulare einzugeben. Wenn Sie einen MySQL-Fehler erhalten, untersuchen Sie dieses Problem sofort.

2. Versuchen Sie, die URL zu ändern, indem Sie% 22 (' ' '),% 23 (' # '),% 27' ' ' hinzufügen.

3. Versuchen Sie, Datentypen in dynamischen URLs von numerischen Zeichen in in den vorherigen Beispielen angegebene Zeichen zu ändern. Ihre Anwendung sollte gegen diese und ähnliche Angriffe sicher sein.

4. Versuchen Sie, Zeichen, Leerzeichen und Sonderzeichen anstelle von Zahlen in numerischen Feldern einzugeben. Ihre Anwendung sollte sie löschen, bevor Sie MySQL akzeptieren, oder Ihre Anwendung sollte einen Fehler generieren.

5. Überprüfen Sie die Datengrößen, bevor Sie sie in MySQL übernehmen.

6. Ihre Anwendung muss eine Verbindung zu einer Datenbank mit einem anderen Benutzer als dem herstellen, den Sie zu Verwaltungszwecken verwenden. Geben Sie Ihrem Antrag nicht mehr Rechte als die, die er wirklich benötigt.

PHP-Benutzer:

Überprüfen Sie die Funktion addlashes (). Nach PHP 4.0.3 steht die Funktion Mysql_escape_string () zur Verfügung, die auf einer gleichnamigen Funktion in der MySQL C-API basiert.

MySQL C API-Benutzer:

Überprüfen Sie die API-API-Abfrage mysql_escape_string ().

MySQL ++ Benutzer :

Überprüfen Sie die Übergänge und die Anführungszeichen für Anführungszeichen in Abfrage-Streams.

Perl DBI- Benutzer :

Überprüfen Sie die quote () -Methode oder verwenden Sie die strukturelle Null (Platzhalter).

Java JDBC- Benutzer :

Verwenden Sie das Objekt PreparedStatement und Platzhalter.

Übertragen Sie keine unverschlüsselten Daten über das Internet. Diese Daten stehen jedem zur Verfügung, der die Zeit und die Fähigkeit hat, sie abzufangen und für ihre eigenen Zwecke zu verwenden. Verwenden Sie stattdessen ein verschlüsseltes Protokoll wie SSL oder SSH. MySQL unterstützt die interne SSL-Version 3.23.9. Mit SSH können verschlüsselte Tunnel erstellt werden.

Lernen Sie tcpdump. In den meisten Fällen können Sie mit dem folgenden Befehl prüfen, ob MySQL-Datenströme unverschlüsselt sind:

shell> tcpdump -l -i eth0 -w - src oder dst-port 3306 | Streicher


Manchmal, um das Skript vor dem Hacken der Website zu schützen, müssen Sie nicht auf bestimmte Sicherheitsanfälligkeiten achten (sondern natürlich beheben), aber um die Website als Ganzes zu schützen (um Sicherheitsanfälligkeiten zu verhindern, bevor sie gefunden werden). In diesem Artikel werde ich Ihnen sagen, was Sie regelmäßig auf Ihrer Website tun müssen, um sie vor Hacking zu schützen.

Wenn Sie ein Skript verwenden, das zum kostenlosen Download zur Verfügung steht, sollten Sie auf Bugtracker achten und regelmäßig aktualisieren. Neuere Versionen beheben häufig schwerwiegende Sicherheitsanfälligkeiten, die in früheren Versionen gefunden wurden.

Wenn Ihre Site angibt, welches Skript Sie verwenden, entfernen Sie die Versionsnummer aus diesen Informationen. Wenn der Hacker nicht weiß, über welche Version Sie verfügen, kann er die Sicherheitsanfälligkeit in der Version des Skripts, das Sie verwenden, möglicherweise nicht verwenden. Aber ich wiederhole, nur "kann", so dass Sie noch aktualisiert werden müssen.

Lassen Sie uns nun die Fehler durchgehen, die in Ihrem selbst erstellten Skript enthalten sein können.

1. Das Passwort wird in einer Datei gespeichert, die von einem Hacker heruntergeladen werden kann.

Wenn die Zugangsdaten in der Datei enthalten sind, muss sie vor dem Herunterladen geschützt werden. Prüfen Sie, ob Sie die Datei mit dem Benutzernamen und dem Kennwort über die Adressleiste des Browsers öffnen können!

2. Das Passwort wird in einer Datei gespeichert, die von den Suchmaschinen indiziert wird.

Wenn Sie den vorherigen Fehler korrigiert haben, korrigieren Sie auch diesen Fehler gleichzeitig. Manchmal werden Login und Passwort in Dateien gespeichert, die Yandex oder Google ohne Probleme finden. Ohne diesen Fehler zu korrigieren, riskieren Sie die Tatsache, dass der Hacker Ihre Website nicht speziell hackt, sondern das Opfer einfach über eine Suchmaschine findet und den ersten erfolglosen Webmaster hackt. Sei nicht sie!

Sie können den Zugriff auf Suchmaschinen übrigens über robots.txt schließen. Ganz dichter Zugriff auf die Site sollte nicht möglich sein (und woher kommen dann die Besucher?), Sollte aber nur für jene Verzeichnisse gelten, die der Besucher nicht sehen sollte, und damit den Suchroboter.

3. Passwort wird unverschlüsselt gespeichert.

Das Passwort muss in verschlüsselter Form gespeichert werden. Der am meisten bevorzugte Typ ist Hashing (Sie können MD5- oder SHA1-Algorithmen verwenden), da es nicht möglich ist, direkt ein Passwort vom Hash zu erhalten. Es gibt jedoch Online-Hash-Basen, in denen das Passwort in Ihrem Hash gespeichert werden kann. Verwenden Sie daher außergewöhnliche Passwörter und Passwörter aus einer beliebigen Anzahl von Zeichen.

Um mehr Vertrauen in den Schutz Ihrer Website zu erhalten, lesen Sie die Artikel zu Hacking, die auf den Hackressourcen frei verfügbar sind, und versuchen Sie, die dort beschriebenen Methoden anzuwenden, wie sie auf sich selbst sagen.