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

Allgemeine Schutzempfehlungen

Jeder, der MySQL (oder ein anderer SQL Server) auf einem mit dem Internet verbundenen Computer verwendet, sollte diese Konsultation lesen, um die häufigsten Schutzprobleme zu vermeiden.

Es ist jedoch wichtig zu betonen, wie wichtig ein vollständiger Server-Schutz (nicht nur ein MySQL- Server) gegen alle Arten von Angriffen ist. In diesem Artikel ist es leider nicht möglich, alle Aspekte von Sicherheitsproblemen abzudecken, aber die wichtigsten Probleme werden in vollem Umfang berücksichtigt.

MySQL verwendet Sicherheit auf der Grundlage von Zugriffssteuerungslisten ( ACLs ) für alle Verbindungen, Anforderungen und andere Operationen, 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 diskutierten Konzepte sind nicht spezifisch für MySQL und können auf alle Anwendungen angewendet werden.

Wenn MySQL gestartet wird, versuchen Sie, diese Empfehlungen zu befolgen:

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

Lernen Sie das MySQL- Zugriffsrechtesystem. Die Befehle GRANT und REVOKE werden verwendet, um den Zugriff auf MySQL zu steuern. Gewähren Sie nicht mehr Rechte als nötig. Erteilen Sie niemals allen Computern im Netzwerk Zugriffsrechte. Checklistenbefehle:

1. Versuchen Sie mysql -u root . Wenn Sie eine Verbindung zum Server herstellen können, ohne ein Passwort anzufordern, haben Sie ein Problem. Jeder kann sich als MySQL- Root-Benutzer mit vollen Rechten an Ihren MySQL-Server anschließen. Lesen Sie die MySQL-Installationsbefehle sorgfältig, wobei Sie auf die Optionen zum Festlegen des Passworts achten müssen.

2. Verwenden Sie die SHOW GRANTS- und Kontrollbefehle , um zu sehen, wer Zugriff auf welche hat. Entfernen Sie über den Befehl REVOKE unnötige Zugriffsrechte.

Speichern Sie Kennwörter nicht als reinen Text in Ihrer Datenbank. Wenn Ihr Computer gehackt wird, kann ein Eindringling die vollständige Liste erhalten

Passwörter und verwenden Sie sie. Verwenden Sie stattdessen den MD5-Algorithmus oder einen anderen, der auf einer einseitigen Hash-Funktion basiert.

Wählen Sie keine Kennwörter aus den Wörterbüchern. Es gibt spezielle Programme, um sie auszuwählen. Auch Passwörter wie "xfish98" sind sehr schlecht. Viel besser ist das "duag98", das dasselbe Wort "Fisch" enthält, aber auf einer Taste auf der Tastatur aufgedruckt ist. Eine andere Methode ist die Verwendung von Passwörtern wie "UIBBR", die aus den ersten Wörtern im Satz "Mary es gab ein großes Kind. "Solche Passwörter sind leicht zu merken und zu drucken, aber es ist schwierig, einen Angreifer zu finden.

Verwenden Sie die Firewall. Es schützt Sie vor mindestens 50% aller ausgenutzten Schwachstellen in jeder Software. MySQL verwendet den Standardport von 3306. Dieser Port muss nur von vertrauenswürdigen Computern aus zugänglich sein. Der einfachste Weg, um zu überprü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

Vertraue keinen Daten, die von Benutzern eingegeben wurden. Sie können Ihren Code durch Eingeben von Sonderzeichen in das Webformular oder die URL täuschen. Stellen Sie sicher, dass Ihre Anwendung sicher bleibt, wenn der Benutzer Folgendes eintippt: DROP DATABASE mysql;. Dies ist ein kritisches Beispiel, aber viele Sicherheitslücken und Datenverluste können durch Hacker mit ähnlichen Methoden auftreten. Vergessen Sie auch nicht, die numerischen Daten zu überprüfen. Ein häufiger Fehler besteht darin, nur die Zeilen zu schützen. Manchmal denken die Leute, wenn die Datenbank nur öffentlich zugängliche Daten enthält, sollte sie nicht geschützt werden. Das ist nicht richtig. Zumindest kann ein DoS-Angriff gegen solche Datenbanken durchgeführt werden. Der einfachste Weg, um gegen diese Art von Angriff zu schützen, ist die Verwendung von Apostrophen um numerische Konstanten:

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

Alle Webanwendungen:

1. Ein Versuch, ' ' '' ' ' in Ihren Webformularen einzugeben. Wenn Sie irgendeine Art von MySQL-Fehler erhalten, untersuchen Sie sofort dieses Problem.

2. Versuchen Sie, die URL durch Hinzufügen von% 22 (' " '),% 23 ('#'),% 27 ' ' 'zu ändern.

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

4. Versuch, Zeichen, Leerzeichen und Sonderzeichen anstelle von Zahlen in numerischen Feldern einzugeben. Ihre Anwendung muss diese entfernen, bevor sie von MySQL akzeptiert werden, oder Ihre Anwendung sollte einen Fehler ausgeben.

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

6. Ihre Anwendung muss eine Verbindung zur Datenbank herstellen, indem Sie einen anderen Benutzer als den administrativen Zweck verwenden. Geben Sie Ihrer Bewerbung nicht mehr Rechte als die, die sie wirklich benötigen.

PHP-Benutzer:

Überprüfen Sie die addslashes () - Funktion. 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-Anforderung mysql_escape_string ().

MySQL ++ Benutzer :

Überprüfen Sie Überlagerungsübergänge und Anführungszeichen in Abfragethreads.

Benutzer von Perl DBI:

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

Java JDBC- Benutzer :

Verwenden Sie das PreparedStatement- und Platzhalterobjekt.

Senden 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 nutzen. Verwenden Sie stattdessen ein verschlüsseltes Protokoll wie SSL oder SSH. MySQL unterstützt die interne SSL-Version 3.23.9. SSH kann verwendet werden, um verschlüsselte Tunnel zu erstellen.

Weitere Informationen zur Verwendung von tcpdump In den meisten Fällen können Sie prüfen, ob die MySQL-Datenströme tatsächlich unverschlüsselt sind, indem Sie den folgenden Befehl eingeben:

shell> tcpdump -l -i eth0 -w - src- oder dst-Port 3306 | Strings


Um das Skript vor dem Hacken einer Site zu schützen, sollten Sie manchmal nicht auf bestimmte Sicherheitslücken achten (aber natürlich müssen Sie diese beheben), sondern um die Site als Ganzes zu schützen (um Schwachstellen zu verhindern, bevor sie gefunden werden). In diesem Artikel werde ich Ihnen sagen, was Sie regelmäßig über Ihre Website tun müssen, um es vor Hackern zu schützen.

Wenn Sie ein Skript verwenden, das zum kostenlosen Download verfügbar ist, achten Sie auf den Bugtracker und aktualisieren Sie ihn regelmäßig. Die neuen Versionen beheben häufig schwerwiegende Schwachstellen in früheren Versionen.

Wenn Sie auf Ihrer Site angeben, welches Skript Sie verwenden, löschen Sie die Versionsnummer aus diesen Informationen. Wenn der Hacker nicht weiß, welche Version Sie haben, kann er die Schwachstelle in der Version des Skripts, die Sie haben, nicht verwenden. Aber auch nur "kann", also immer noch aktualisiert werden.

Schauen wir uns nun die Fehler an, die möglicherweise in Ihrem selbst erstellten Skript liegen.

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

Wenn die Details des Zugriffs in der Datei enthalten sind, muss dies vor dem Herunterladen geschützt werden. Prüfen Sie, ob Sie eine Datei mit Ihrem Login und Passwort über die Adressleiste des Browsers öffnen können!

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

Den vorherigen Fehler korrigieren, gleichzeitig beheben - manchmal werden Login und Passwort in Dateien gespeichert, die von Yandex oder Google leicht gefunden werden können! Wenn Sie diesen Fehler nicht korrigieren, riskieren Sie, dass der Hacker Ihre Website nicht einmal speziell hackt, sondern einfach ein Opfer durch die Suchmaschine findet und den ersten fehlgeschlagenen, nicht erfolgreichen Web-Master hackt! Beweise dich nicht!

Übrigens können Sie den Zugriff auf Suchmaschinen durch robots.txt blockieren. Vollständig enger Zugriff auf die Website sollte nicht sein (und woher kommen die Besucher?), Sondern nur für diejenigen Verzeichnisse, die der Besucher nicht sehen sollte, und daher den Suchroboter.

3. Das Passwort wird unverschlüsselt gespeichert

Das Passwort muss verschlüsselt gespeichert werden. Die bevorzugte Art ist Hashing (Sie können MD5- oder SHA1-Algorithmen verwenden), da es unmöglich ist, ein Passwort direkt aus dem Hash zu holen. Aber es gibt Online-Hash-Datenbanken, in denen das Passwort gespeichert werden kann und in Ihrem Hash, also verwenden Sie nicht-gewöhnliche Passwörter und Passwörter aus einem zufälligen Zeichensatz.

Um mehr Vertrauen in die Zuverlässigkeit des Schutzes Ihrer Website zu haben, lesen Sie die Hacking-Artikel, die auf Hackressourcen frei verfügbar sind, und versuchen Sie, die dort beschriebenen Methoden anzuwenden, wie sie sagen "auf dich selbst".