Verschlüsselung im Ruhezustand
Verschlüsselung im Ruhezustand sind die Daten in der Datenbank, wenn sie nicht verwendet/zugegriffen oder aktualisiert werden. Verschlüsselung für unterwegs ist Dinge wie TLS
wo die Daten (aus der Datenbank ) wird von Server zu Server zu Browser, zu Server, zu Browser usw. transportiert. TLS ist in den meisten Situationen vollkommen gut, wenn es sorgfältig gehandhabt und mit der Einstellung angegangen wird, dass Sie mehr als das absolute Minimum tun müssen um es tatsächlich realistisch sicher zu machen.
Ein typisches Beispiel sind Leute, die ein TLS-Zertifikat von LetsEncrypt auf ihre Domain setzen und denken, dass plötzlich alle ihre Sachen sicher sind; aber sie verschlüsseln weder ihre Sitzungen noch ihre Cookies so hinterlassen sie ein riesiges potenzielles Loch in ihrer Abwehr.
Verwenden Sie nicht das eingebaute Verschlüsselungssystem von MySQL.
Ich kann das nicht genug betonen; das eingebaute Verschlüsselungssystem in MySQL ist nicht für einen wirklich sicheren Datenschutz geeignet.
Bitte lesen Sie meine Antwort auf eine sehr ähnliche Frage hier zu den Details (Ich möchte nicht einfach kopieren/einfügen ).
Ok, weil Sie darauf bestehen.... hier:
Nach dem, was ich in meiner eigenen Recherche zu diesem Thema gelesen habe, ist der von Magnus bereitgestellte Link zu defuse/php -Verschlüsselung ist eine der besten Möglichkeiten, um zu verhindern, dass MySQL Sie jemals dazu bringt, Ihre Daten zu kompromittieren, indem Sie dem MySQL-Programm/Server niemals den Klartextwert Ihrer Daten zeigen.
– Antwort wie am 7. Mai 2017 gepostet.
Auch Bill Karwins Antwort auf dieselbe Frage gibt einige wertvolle zusätzliche Einblicke:
– Antwort wie am 7. Mai 2017 gepostet.
Schlusspunkt:
Sicherheit ist komplex. Wenn Sie es richtig machen wollen und Vertrauen in Ihre schützenden Zwiebelschalen haben, müssen Sie eine Menge Dinge tun (siehe Aufzählungszeichen unten); aber das erste, was Sie tun müssen, ist:
-
Definieren Sie, vor wem Sie schützen möchten
Ernsthaft. Sie brauchen unterschiedliche Strategien gegen jemanden, der Ihre Klartextnamen und -adressen stehlen will, gegen jemanden, der Ihren Server übernehmen will, und gegen jemanden, der einfach nur die Daten vernichten will. Es ist ein Mythos, dass man sich jederzeit gegen jeden schützen kann, konzeptionell ist dies unmöglich*; Sie müssen also die wahrscheinlichsten Angreifer definieren und dann herausfinden, wie Sie ihre Angriffe am besten abschwächen können.
Speziell für MySQL einige klare Empfehlungen:
-
Halten Sie SQL und PHP auf demselben Server. Greifen Sie nicht remote auf die MySQL-Daten zu.
-
Schließen Sie den externen Zugriff auf die SQL aus (also
localhost
nur) -
Verschleiern Sie Ihre Tabellennamen und Spaltennamen; wenn jemand in Ihre Daten eindringt und Sie
HDTBJ^BTUETHNUYT
haben unter der Spalteusername
dann wissen sie, dass es sich bei diesem Unsinn wahrscheinlich um einen Benutzernamen handelt, also haben sie einen sehr guten Anfang beim Versuch, Ihre Verschlüsselung zu knacken. -
WICHTIG :Sperren Sie Ihren Tischzugriff wirklich; Richten Sie viele MySQL-Benutzer ein, von denen jeder nur die absoluten Mindestprivilegien hat, um das zu tun, was er braucht; Sie möchten, dass ein Benutzer die Tabelle liest (nur ) und nur bestimmte Tabellen lesen; Benutzer können in bestimmte Tabellen schreiben, haben aber keinen Zugriff auf andere Tabellen. Es ist von Bedeutung, dass, wenn irgendein Benutzer auf MySQL kompromittiert wird; Sie haben nicht automatisch alle darin enthaltenen Daten verloren.
-
Verwenden Sie PHP-Verschlüsselungsdienste. Speichern Sie Verschlüsselungsschlüssel an einem völlig separaten Ort; Haben Sie beispielsweise einen anderen Server, den Sie nur für Backups verwenden, auf den Sie nur zugreifen können, um die Verschlüsselungsschlüssel zu erhalten. Wenn Ihr PHP/MySQL-Server kompromittiert ist, haben Sie daher etwas Platz, um den Schlüsselserver abzuschneiden und zu sperren, damit Sie können den Schaden begrenzen. Wenn der Schlüsselserver auch Backups hat, dann sind Sie wirklich nicht allzu stark kompromittiert (situationsabhängig ).
-
Richten Sie viele Beobachter und E-Mail-Informanten ein, die Ihnen genau mitteilen, wann bestimmte Prozesse ausgeführt werden und welche Serverbenutzer (nicht Personen, sondern Programme) was tun. Sie können also sehen, warum ein unerwarteter Prozess um 5 Uhr morgens zu laufen beginnt, um zu versuchen, die Größe der MySQL-Tabellen zu messen. WTF?
-
Es besteht ein großes Potenzial, dass Ihre mit MySQL AES_ENCRYPT versehenen Daten „erschnüffelt“ werden, auch wenn sie nicht in der DB ruhen, aber wenn die Website kompromittiert wird (oder schlimmer noch, der PHP-Code unsicher ist), können Timing-Angriffe funktionieren Dateninhalte durch Timing-Suchanfragen und Datenpaketrückgaben.
-
Sicherheit ist ein schwarzes Loch; Irgendwann wirst du denken:„So, ich habe genug getan“. Niemand hat jemals absolute Sicherheit, einige sehr engagierte Organisationen haben genug Sicherheit. Sie müssen herausfinden, wie weit Sie bereit sind zu gehen, bevor Sie die Strecke zurückgelegt haben.
* Warum unmöglich? Denn um Ihre Daten jederzeit vor allen Bedrohungen zu schützen, müssten sie unlesbar und unbrauchbar sein, wie ein Hash. Ein Hash ist jederzeit vor allen geschützt. Aber ein Hash kann niemals enthasht werden.