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 dieses Lernprogramm lesen, um die häufigsten Sicherheitsprobleme zu vermeiden.

Es muss jedoch betont werden, wie wichtig der vollständige Schutz des Servers (nicht nur des MySQL- Servers) vor allen Arten von Angriffen ist. In diesem Artikel ist es leider nicht möglich, alle Aspekte von Sicherheitsproblemen abzudecken, aber die wichtigsten Probleme werden vollständig berücksichtigt.

MySQL verwendet einen auf Zugriffssteuerungslisten (Access Control Lists, ACLs ) basierenden Schutz für alle Verbindungen, Abfragen und anderen Vorgänge, die der Benutzer möglicherweise ausführen möchte. Es gibt auch Unterstützung für SSL- verschlüsselte Verbindungen zwischen MySQL- Clients und -Servern. Viele der in diesem Artikel beschriebenen Konzepte sind nicht spezifisch für MySQL und können auf alle Anwendungen angewendet werden.

Wenn MySQL ausgeführt wird , versuchen Sie, die folgenden Richtlinien zu befolgen:

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 problemlos als dieser Benutzer anmelden, wenn Sie Zugriff auf den für dieses Konto aufgeführten Computer haben.

Lernen Sie das MySQL- Zugriffsberechtigungssystem kennen. Mit den Befehlen GRANT und REVOKE wird der Zugriff auf MySQL gesteuert. Gewähren Sie nicht mehr Berechtigungen als nötig. Gewähren Sie niemals allen Computern im Netzwerk Berechtigungen. Überprüfungsbefehle:

1. Versuchen Sie mysql -u root . Wenn Sie eine Verbindung zum Server herstellen können, ohne nach einem Kennwort zu fragen, treten Probleme auf. Jeder kann sich als MySQL- Root-Benutzer mit vollen Berechtigungen mit Ihrem MySQL-Server verbinden. Lesen Sie die MySQL-Installationsanweisungen sorgfältig durch und beachten Sie dabei die Optionen zur Kennworteinstellung.

2. Verwenden Sie die SHOW GRANTS und überprüfen Sie die Befehle, um festzustellen , wer Zugriff auf welche hat. Entfernen Sie unnötige Berechtigungen mit dem Befehl REVOKE.

Speichern Sie keine Klartextkennwörter 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 einen anderen Algorithmus, der auf einer Einweg-Hash-Funktion basiert.

Wählen Sie keine Passwörter aus Wörterbüchern aus. Es gibt spezielle Programme, um sie abzuholen. Sogar Passwörter wie "xfish98" sind sehr schlecht. Viel besser ist "duag98", das das gleiche Wort "fish" enthält, aber eine Taste links von der Tastatur eingibt. Eine andere Methode besteht darin, Passwörter wie "UMBR" zu verwenden, die aus den ersten Wörtern im Satz "Mary" bestehen war ein großes Kind. "Solche Passwörter sind leicht zu merken und einzugeben, aber für einen Angreifer ist es schwierig, sie zu finden.

Verwenden Sie eine Firewall. Es schützt Sie vor mindestens 50% der ausnutzbaren Sicherheitslücken in einer Software. MySQL verwendet standardmäßig den 3306-Port. Auf diesen Port sollte nur von vertrauenswürdigen Computern aus zugegriffen werden können. Der einfachste Weg, um zu überprüfen, ob Ihr MySQL-Port geöffnet ist, besteht darin, den folgenden Befehl von einem Remotecomputer aus auszuführen, wobei server_host der Hostname Ihres MySQL-Servers ist: telnet server_host 3306

Vertrauen Sie keinen von Benutzern eingegebenen Daten. Sie können Ihren Code durch Eingabe von Sonderzeichen in ein Webformular oder eine URL austricksen. Stellen Sie sicher, dass Ihre Anwendung sicher bleibt, wenn der Benutzer Folgendes eingibt: DROP DATABASE mysql; Dies ist ein kritisches Beispiel, aber aufgrund von Hackern, die ähnliche Methoden verwenden, können viele Sicherheitslücken und Datenverluste auftreten. Überprüfen Sie auch die numerischen Daten. Ein häufiger Fehler besteht darin, nur Zeichenfolgen zu schützen. Manchmal denken die Leute, wenn eine Datenbank nur öffentlich verfügbare Daten enthält, sollte sie nicht geschützt werden. Das ist nicht richtig. Zumindest ein DoS-Angriff kann gegen solche Datenbanken durchgeführt werden. Der einfachste Weg, sich gegen diese Art von Angriff zu verteidigen, besteht darin, Apostrophe um numerische Konstanten zu verwenden:

SELECT * FROM Tabelle WHERE ID = '234' . MySQL konvertiert diese Zeichenfolge automatisch in eine Zahl und entfernt alle nicht numerischen Zeichen in der Abfrage. Wir prüfen:

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 durch Hinzufügen von% 22 (' ' '),% 23 (' # '),% 27' ' ' zu ändern.

3. Ein Versuch, Datentypen in dynamischen URLs von numerischen Zeichen in Zeichen zu ändern, die in den vorherigen Beispielen angegeben wurden. Ihre Anwendung sollte vor diesen und ähnlichen Angriffen geschützt sein.

4. Versuchen Sie, Zeichen, Leerzeichen und Sonderzeichen anstelle von Zahlen in numerische Felder einzugeben. Ihre Anwendung muss sie löschen, bevor Sie MySQL akzeptieren, oder Ihre Anwendung sollte einen Fehler auslösen.

5. Überprüfen Sie die Datengrößen, bevor Sie MySQL akzeptieren.

6. Ihre Anwendung muss mit einem anderen Benutzer als dem, den Sie für Verwaltungszwecke verwenden, eine Verbindung zur Datenbank herstellen. Geben Sie Ihrer Anwendung nicht mehr Rechte als die, die sie wirklich benötigen.

PHP-Benutzer:

Überprüfen Sie die Funktion addslashes (). Nach PHP 4.0.3 ist die Funktion Mysql_escape_string () verfügbar, die auf einer gleichnamigen Funktion in der MySQL C-API basiert.

Benutzer der MySQL C-API:

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

MySQL ++ Benutzer :

Überprüfen Sie die Übergänge und Anführungszeichen von Modifikatoren in Abfrageflüssen.

Perl DBI- Benutzer :

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

Java JDBC- Benutzer :

Verwenden Sie das PreparedStatement-Objekt und die 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 seine 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.

Erfahren Sie, wie Sie tcpdump verwenden. In den meisten Fällen können Sie mit dem folgenden Befehl überprüfen, ob die MySQL-Datenströme wirklich unverschlüsselt sind:

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


Um ein Skript vor dem Hacken einer Site zu schützen, müssen Sie manchmal nicht auf bestimmte Schwachstellen achten (aber diese müssen natürlich behoben werden), sondern die Site als Ganzes schützen (im Wesentlichen Schwachstellen 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 verfügbar ist, suchen Sie nach Bugtracker und aktualisieren Sie es regelmäßig. Neuere Versionen beheben häufig schwerwiegende Sicherheitslücken in früheren Versionen.

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, verwendet er die Sicherheitsanfälligkeit möglicherweise nicht in der Version des Skripts, über die Sie verfügen. Aber ich wiederhole, nur "vielleicht", also trotzdem aktualisieren.

Lassen Sie uns nun die Fehler durchgehen, die möglicherweise in Ihrem selbst erstellten Skript enthalten sind.

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

Wenn die Zugriffsdaten in der Datei enthalten sind, muss sie vor dem Herunterladen geschützt werden. Überprüfen Sie, ob Sie die Datei mit dem Benutzernamen und dem Passwort über die Adressleiste Ihres Browsers öffnen können!

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

Nachdem Sie den vorherigen Fehler behoben haben, werden Sie auch diesen korrigieren - manchmal werden der Benutzername und das Passwort in Dateien gespeichert, die Yandex oder Google ohne Probleme finden! Ohne diesen Fehler zu korrigieren, riskieren Sie, dass der Hacker Ihre Website nicht einmal speziell hackt, sondern einfach über eine Suchmaschine ein Opfer findet und den ersten erfolglosen Webmaster hackt! Sei nicht sie!

Übrigens können Sie den Zugriff auf Suchmaschinen über robots.txt blockieren. Es ist nicht erforderlich, den Zugriff auf die Site vollständig zu schließen (und woher kommen die Besucher?), Sondern nur für die Verzeichnisse, die der Besucher nicht sehen sollte, und folglich für den Suchroboter.

3. Das Passwort wird unverschlüsselt gespeichert.

Das Passwort muss verschlüsselt gespeichert werden. Der am meisten bevorzugte Typ ist Hashing (Sie können die MD5- oder SHA1-Algorithmen verwenden), da es unmöglich ist, das Kennwort direkt vom Hash abzurufen. Es gibt jedoch Online-Hash-Datenbanken, in denen das Kennwort für Ihren Hash gespeichert werden kann. Verwenden Sie daher außergewöhnliche Kennwörter und Kennwörter aus einem zufälligen Zeichensatz.

Um mehr Vertrauen in die Zuverlässigkeit des Schutzes Ihrer Website zu haben, lesen Sie die Artikel zum Thema Hacking, die für Hack-Ressourcen frei verfügbar sind, und versuchen Sie, die dort beschriebenen Techniken anzuwenden, wie sie "auf sich selbst" sagen.