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 Computer verwendet, der mit dem Internet verbunden ist, sollte diese Konsultation lesen, um die häufigsten Schutzprobleme zu vermeiden.

Es ist jedoch wichtig, die Wichtigkeit eines vollständigen Serverschutzes (nicht nur eines MySQL- Servers) gegenüber allen Arten von Angriffen hervorzuheben. In diesem Artikel ist es leider nicht möglich, alle Aspekte von Sicherheitsproblemen zu behandeln, aber die wichtigsten Probleme werden vollständig berücksichtigt.

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

Versuchen Sie bei der Ausführung von MySQL , diesen Empfehlungen zu folgen:

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 angegebene Kennwort kennen, können Sie sich einfach als dieser Benutzer anmelden, wenn Sie Zugriff auf den Computer haben, der für dieses Konto aufgeführt ist.

Studieren Sie das MySQL- Zugriffsberechtigungssystem. Die Befehle GRANT und REVOKE werden verwendet, um den Zugriff auf MySQL zu steuern. Gewähre nicht mehr Privilegien als nötig. Erteilen Sie niemals allen Computern im Netzwerk Berechtigungen. Checklistenbefehle:

1. Probieren Sie mysql -u root aus . Wenn Sie sich mit dem Server verbinden können, ohne ein Passwort anzufordern, haben Sie ein Problem. Jeder kann sich mit vollen Rechten als MySQL- Root-Benutzer mit Ihrem MySQL-Server verbinden. Lesen Sie die MySQL-Installationsbefehle aufmerksam durch und beachten Sie dabei die Optionen für die Passworteinstellung.

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

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

Passwörter und benutze 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 den Wörterbüchern. Es gibt spezielle Programme, um sie auszuwählen. Selbst Passwörter wie "xfish98" sind sehr schlecht. Viel besser ist die "duag98", die das gleiche Wort "Fisch" enthält, aber auf einer Taste links 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 auszudrucken, aber es ist schwierig, einen Angreifer aufzunehmen.

Benutze die Firewall. Es schützt Sie vor mindestens 50% der ausgenutzten Sicherheitslücken 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 zu versuchen, wobei server_host der Hostname Ihres MySQL-Servers ist: telnet server_host 3306

Vertrauen Sie keinen Daten, die von Benutzern eingegeben wurden. Sie können Ihren Code durch Eingabe von Sonderzeichen in das Webformular oder die URL täuschen. Stellen Sie sicher, dass Ihre Anwendung sicher bleibt, wenn der Benutzer etwas wie folgt eingibt: DROP DATABASE mysql;. Dies ist ein kritisches Beispiel, aber viele Sicherheitslecks und Datenverluste können aufgrund von Hackern auftreten, die ähnliche Methoden verwenden. Vergessen Sie auch nicht, die numerischen Daten zu überprüfen. Ein häufiger Fehler besteht darin, nur die Zeilen zu schützen. Manchmal denken Leute, dass wenn die Datenbank nur öffentlich verfügbare 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, sich vor dieser Art von Angriffen zu schützen, 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. Ein Versuch, ' ' '' ' ' in Ihren Webformularen einzugeben. Wenn Sie irgendeinen MySQL-Fehler bekommen, 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 Zeichen in den vorherigen Beispielen 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 muss sie entfernen, bevor sie von MySQL akzeptiert werden, oder Ihre Anwendung sollte einen Fehler ausgeben.

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

6. Ihre Anwendung muss mit der Datenbank eine Verbindung herstellen, die einen anderen Benutzer als den verwendet, den Sie für administrative Zwecke verwenden. Gib deiner Bewerbung nicht mehr Rechte als denjenigen, die sie wirklich brauchen.

PHP Benutzer:

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

MySQL C API Benutzer:

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

MySQL ++ Benutzer :

Überprüfen Sie Modifiziererü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 Objekt PreparedStatement und Platzhalter.

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.

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

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


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

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

Wenn Sie auf Ihrer Site angeben, welches Skript Sie verwenden möchten, löschen Sie die Versionsnummer aus diesen Informationen. Wenn der Hacker nicht weiß, welche Version Sie haben, kann er die Sicherheitslücke in der Version des Skripts, die Sie haben, nicht verwenden. Aber, wieder, nur "kann", so dass immer noch aktualisiert werden.

Sehen wir uns jetzt die Fehler an, die in Ihrem selbst erstellten Skript vorkommen können.

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

Wenn die Details des Zugriffs in der Datei enthalten sind, ist es notwendig, sie vor dem Herunterladen zu schützen. Überprüfen Sie, ob Sie eine Datei mit Ihrem Benutzernamen und Passwort über die Adressleiste des Browsers öffnen können!

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

Korrigieren Sie den vorherigen Fehler und korrigieren Sie ihn gleichzeitig. Manchmal werden der Benutzername und das 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 nicht einmal Ihre Website gezielt hackt, sondern einfach ein Opfer durch die Suchmaschine findet und den ersten erfolglosen Webmaster hackt! Beweise dich ihnen nicht!

Übrigens können Sie den Zugriff auf Suchmaschinen über robots.txt blockieren. Vollständig enger Zugriff auf die Seite sollte nicht sein (und woher kommen die Besucher?), Aber nur für jene Verzeichnisse, die der Besucher nicht sehen sollte, und somit der Suchroboter.

3. Das Passwort wird unverschlüsselt gespeichert

Das Passwort muss in verschlüsselter Form gespeichert werden. Die am meisten bevorzugte Art ist Hashing (MD5- oder SHA1-Algorithmen können verwendet werden), da es unmöglich ist, ein Passwort direkt aus dem Hash zu erhalten. Aber es gibt Online-Hash-Datenbanken, in denen das Passwort gespeichert werden kann und zu Ihrem Hash, also verwenden Sie nicht-normale Passwörter und Passwörter aus einer zufälligen Menge von Zeichen.

Um mehr Vertrauen in die Zuverlässigkeit des Schutzes Ihrer Site zu gewinnen, lesen Sie die Hacking-Artikel, die auf Hack-Ressourcen frei verfügbar sind, und versuchen Sie, die dort beschriebenen Methoden anzuwenden, wie sie sagen: "auf sich selbst".