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 Konsultation 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 können leider nicht alle Aspekte von Sicherheitsproblemen behandelt werden, aber die wichtigsten Probleme werden vollständig berücksichtigt.

MySQL verwendet Sicherheit basierend auf Zugriffssteuerungslisten (Access Control Lists, ACLs ) für alle Verbindungen, Abfragen und anderen Vorgänge, die ein 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 diskutierten Konzepte sind nicht MySQL- spezifisch und können auf alle Anwendungen angewendet werden.

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

Geben Sie niemandem (außer dem MySQL- Administrator) Zugriff auf die USER- Tabelle in der MySQL-Datenbank . Verschlüsseltes Passwort - 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 aufgelisteten Computer haben.

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

1. Versuchen Sie es mit mysql -u root . Wenn Sie eine Verbindung zum Server herstellen können, ohne nach einem Kennwort zu fragen, liegt ein Problem vor. Jeder kann sich als MySQL- Root mit vollen Rechten mit Ihrem MySQL-Server verbinden. Lesen Sie die MySQL-Installationsbefehle sorgfältig durch und achten Sie auf die Optionen zum Festlegen des Kennworts.

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

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

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

Wählen Sie keine Passwörter aus Wörterbüchern. Es gibt spezielle Programme, um sie abzuholen. Selbst Passwörter wie "xfish98" sind sehr schlecht. Viel besser ist duag98, das dasselbe Wort fish enthält, aber eine Taste links auf der Tastatur eingibt. Eine andere Methode ist die Verwendung von Kennwörtern wie UMBR, die aus den ersten Wörtern des Satzes „Mary es gab ein großes Kind. "Solche Passwörter sind leicht zu merken und zu tippen, aber für einen Angreifer schwer zu finden.

Verwenden Sie eine Firewall. Es schützt Sie vor mindestens 50% der ausgenutzten Sicherheitslücken in jeder Software. MySQL verwendet standardmäßig Port 3306. 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 offen 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 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 kritisches Beispiel, aber viele Sicherheitslücken und Datenverluste können auftreten, wenn Hacker ähnliche Methoden anwenden. Vergessen Sie auch nicht, die numerischen Daten zu überprüfen. Ein häufiger Fehler besteht darin, nur Zeichenfolgen zu schützen. Manchmal denken 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 auf solche Datenbanken durchgeführt werden. Der einfachste Weg, sich gegen diese Art von Angriff zu schützen, ist die 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 irgendeine Art von MySQL-Fehler bekommen, untersuchen Sie dieses Problem sofort.

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

3. Versuchen Sie, den Datentyp in dynamischen URLs von numerischen Zeichen zu Zeichen zu ändern, die in den vorherigen Beispielen angegeben wurden. Ihre Anwendung sollte vor diesen und ähnlichen Angriffen sicher sein.

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

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

6. Ihre Anwendung muss mit einem anderen Benutzer als dem, den Sie zu Verwaltungszwecken verwenden, eine Verbindung zu einer Datenbank herstellen. Gewähren Sie Ihrer Bewerbung nicht mehr Rechte als sie wirklich benötigen.

PHP-Benutzer:

Überprüfen Sie die Funktionen von addedslashes (). 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 für mysql_escape_string ().

MySQL ++ Benutzer :

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

Perl DBI- Benutzer :

Überprüfen Sie die quote () -Methode oder verwenden Sie eine strukturelle 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 MySQL-Datenströme unverschlüsselt sind:

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


Manchmal müssen Sie, um das Skript vor Hackerangriffen auf die Website zu schützen, nicht auf bestimmte Sicherheitsanfälligkeiten achten (diese müssen jedoch behoben werden) und die Website als Ganzes schützen (in der Tat Sicherheitsanfälligkeiten verhindern, bevor sie gefunden werden). In diesem Artikel werde ich Ihnen sagen, was Sie regelmäßig für Ihre Website tun müssen, um sie vor Hackerangriffen zu schützen.

Wenn Sie ein Skript zum kostenlosen Download verwenden, achten Sie auf den Bugtracker und aktualisieren Sie es regelmäßig. Neuere Versionen beheben häufig schwerwiegende Sicherheitslücken in früheren Versionen.

Wenn Ihre Site auch 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 möglicherweise nicht die Sicherheitsanfälligkeit in der Version des Skripts, über die Sie verfügen. Aber ich wiederhole, nur "kann", so dass Sie noch aktualisiert werden müssen.

Gehen wir nun die Fehler durch, die in Ihrem selbst erstellten Skript auftreten können.

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

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

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

Indem Sie den vorherigen Fehler korrigieren, korrigieren Sie diesen gleichzeitig - manchmal werden Login und Passwort in Dateien gespeichert, die Yandex oder Google ohne Probleme findet! Ohne diesen Fehler zu beheben, riskieren Sie, dass der Hacker Ihre Website nicht einmal spezifisch hackt, sondern das Opfer einfach über eine Suchmaschine findet und den ersten erfolglosen Webmaster hackt! Seid nicht sie!

Übrigens können Sie den Zugriff auf Suchmaschinen über robots.txt sperren. Ein vollständig geschlossener Zugriff auf die Site sollte nicht (und woher kommen dann die Besucher?), Sondern nur für diejenigen Verzeichnisse, die der Besucher nicht sehen sollte, und daher auch 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 MD5- oder SHA1-Algorithmen verwenden), da es unmöglich ist, ein Kennwort direkt aus dem Hash abzurufen. Es gibt jedoch Online-Hash-Datenbanken, in denen das Passwort in Ihrem Hash gespeichert werden kann. Verwenden Sie daher außergewöhnliche Passwörter und Passwörter aus einer zufälligen Anzahl von Zeichen.

Um mehr Vertrauen in den Schutz Ihrer Website zu gewinnen, lesen Sie die Artikel zum Thema Hacking, die in den Hack-Ressourcen frei verfügbar sind, und versuchen Sie, die dort beschriebenen Techniken "auf sich selbst" anzuwenden.