Verschlüsselung für mysql Passwort in php (oder wie besiegen automatisierte code-scanner-roten Flagge)
Verwaltung schlägt wieder zu.
Wie sollte ich erfüllen-code-scanner, das geht, Lesen Sie meine php-source und die rote fahne meiner MySQL connection-string?
- Linux-Server (bald Sonne)
- php 4.2 (bald neueste version)
- MySQL-Datenbank
- - Server in einer DMZ außerhalb der firewall
- Lesen nur MySQL-account
- Nicht ein einziges byte nicht öffentliche Informationen in der Datenbank
Habe ich zum verschlüsseln meiner MySQL-Kennwort in der Verbindungszeichenfolge aus keinem anderen Grund, als es ist rot gekennzeichnet, die durch die automatische code-Tests Lösung. Das Management ist begeistert von dem Konzept von Pen-Testing, ohne es zu verstehen.
Ich weiß genau es ist nicht mehr sicher zu verschlüsseln Sie das Kennwort in die Datei mit allen anderen Maßnahmen im Ort, aber meine Seiten down genommen werden, wenn ich nicht erfüllen. Ich weiß, es tut weh, Leistung, aber diese Seite ist nicht so beliebt, und nicht ein riesiger Datenbank gestützte app sowieso.
Mein Versuch:
//encrypt and decrypt are functions I stole wholesale off of the php.net manual
...
$SuperSecure[0] = array(encrypt("test"), encrypt("test")); //dev
...
$dbcnx = mysql_connect('localhost', decrypt($SuperSecure[0][0]), decrypt($SuperSecure[0][1]));
Gibt es eine bessere Möglichkeit? Noch wichtiger ist, bin ich etwas fehlt und das ist eigentlich notwendig?
Edit: ich kann nicht kämpfen nationale mehr. Wenn ich das ignorieren dieser Richtlinie meine Website kommt und meinen job zu verlieren über diese dumme. Ich habe gerade zu tun, wie leicht (und mit den geringsten Auswirkungen auf die Leistung) wie möglich.
Sie haben sich nicht eingeführt noch. Mein Chef sagte mir, um den code zu erhalten, aktualisiert, bevor der scanner läuft
In diesem Fall würde ich nicht "Schreien, bevor es weh tut" 😉 Wenn Sie nicht wissen, über den scanner (immerhin gibt es könnte Sicherheit Strategie, das beinhaltet mehr als nur ein code-snippet) ich denke, es ist eine Verschwendung von Zeit, um code herum kann man sowas nicht beurteilen. Entweder Holen Sie sich den Leitfaden/Dokumentation oder warten, bis die schlechten Dinge, die passieren.
Auch, wer setzt auf web-Scannern anstelle der manuellen code-reviews verdient diese Art von Mist in Ihre website.
InformationsquelleAutor MrChrister | 2009-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht möchten, schreiben Sie das Kennwort direkt in
mysql_connect
, warum schreiben Sie nicht so etwas wie:Ohne zu wissen, wie clever der scanner ist nicht wirklich in der Lage sein zu sagen, was obsfucation ist genug, um nicht zu erhöhen, keine Fahnen.
Für meine web-services -, ich Schreibe ein secrets.php dass nicht geprüft in version control. Umfassen, die auf die Bereitstellung und das Kennwort definiert, ist noch nicht verfügbar.
Warten, also das geht so sicher mit dem scanner (im Gegensatz zu nicht mit Variablen)? Ich werde für dich beten, dein Chef und sein Chef.
Ich danke Ihnen für Ihre Gebete. Meine persönliche Hölle geht weiter mit den nationalen web-team-treffen. Die Tiefe Ihrer Verderbtheit kennt die Grenzen meiner Scham und weiterhin Höcker, die mich in Gefahr.
InformationsquelleAutor Tomas Markauskas
Können Sie rot13 zu verschleiern (nicht verschlüsseln) das Passwort
rot13 nur verschiebt jedes Zeichen um 13, der im alphabet. rot13(rot13(originalstring)) liefert den originalstring. Ich glaube nicht, dass die Leistung, die Sie Locker durch einen Verschlüsselungs-Mechanismus messbar.
InformationsquelleAutor Otto Allmendinger
Konnte nicht definieren Sie die Standard-mysql-host, username und password in einer php.ini-Datei? Dann die mysql_connect () Funktion sieht so aus:
Und es sei denn, ein hacker hat Ihr php.ini-Datei, die Sie nicht in der Lage sein, um Zugriff auf den Benutzernamen oder das Passwort. Auch wenn Sie verändert die Funktion
echo
. Sicher, Sie könnte das echo den Richtlinien, aber ich denke, es ist verschleiert genug, als das Passwort konnte nicht gefunden werden in jedem der source-Dateien, abgesehen von php.ini, das ist eine server-Datei.Gegeben, wenn jemand hat einen
phpinfo();
es auch angezeigt wäre, in plain site, aber es würde immer noch funktionieren.Diese Lösung ist sehr ähnlich zu der ODBC-Lösung von einem anderen beantworten. Es hat auch den Fehler, dass wenn der scanner prüft, ob in Ihrer php.ini-Datei, es wird zu Ende gehen bis rot Kennzeichnen, statt.
Wenn Sie möchten, um Spaß an der gleichen Zeit, würde ich vorschlagen, nach dem Zufallsprinzip setzen snippets Ihrer mysql-code in beliebigen Dateien, die alle umfasst, bevor Sie eine Verbindung herstellen müssen. AKA
Index.php
RandomFile.php
RandomFile2.php
RandomFile3.php
RandomFile4.php
Wissen Sie, es ist ein experimental-Bibliothek, laden Sie den code in ein bytecode-format. Wenn Sie nur lassen Sie den scanner die scan -, dass, wäre es wahrscheinlich nicht das Passwort.... dann wieder, es würde nichts finden.
InformationsquelleAutor Tyler Carter
XOR! Die basis des ehrwürdigen one-time-pad. Es ist legitim, Verschlüsselung, macht man sich mehr charmant dann rot13() und jemand kompetentes sollte in der Lage sein, um es herauszufinden. Zur gleichen Zeit, niemand wird grepping Ihr Passwort.
Aaand ich plötzlich hassen, wie PHP funktioniert arrays... Nun, nehmen Sie den Ausgang dieses...
Der erste Teil ist Ihre Verschlüsselung generator, und der zweite Teil ist das, was Sie haben, um in das Programm. Die einzige Regel ist, dass alles, was bytestring Sie XOR das Passwort gegen sollte die gleiche Länge wie das Passwort. Es wird wahrscheinlich nichts unerwünschtes, wenn es nicht, aber ich fühle mich nicht wie ein testcase.
InformationsquelleAutor Jeff Ferland
IST es unnötig, da Sie nur verschleiern das Passwort. Wer hat die Quelle konnte das anmelden an der Datenbank, da dein PHP-Skript muss wissen
decrypt
um das ursprüngliche Kennwort.Beispiel
lassen Sie uns sagen, dass Ihr Passwort eine Zahl ist, zum Beispiel
42
und dassencrypt
ist eine Funktion, die multipliziert das Ergebnis mit zwei unddecrypt
das Gegenteil ist der Fall.Dann speichern Sie
84
im code irgendwo. Aber PHP hat, um zu wissen, diedecrypt
Funktion auch und konvertiert es in42
ersten, bevor Sie mit der Datenbank verbinden. So, da alles, was Sie brauchen, stehen in der PHP-Datei, es ist sinnlos zu verschleiern die notwendigen Informationen.Einige böse hacker, die hat Ihre Quelle konnte immer ersetzen
mysql_connect
im code-Beispiel mit einerecho
aus und erhalten die plain-text-Passwort...Einfache Verschleierung
Vielleicht genügt es, etwas zu verwenden, wie
"t"."e"."s"."t"
statt"test"
im code zu umgehen die Erkennung des Passworts...Es ist schlimmer als Sie vermuten. Das verschlüsseln und entschlüsseln Funktionen sind nur 20 Zeilen Weg von den Schnittstellen databaseconnection-Funktion. Wenn Sie die Datei haben, haben Sie alles, was Sie brauchen. Wir sprechen hier nicht von Sicherheit hier, da dieses neue Mandat bietet die Möglichkeit, für keine.
InformationsquelleAutor Etan
Man könnte eine ODBC Verbindung zum Zugriff auf die Datenbank. Die ODBC-abstraction-layer speichert die Eigenschaften der Verbindung in einer separaten Datei (in UnixODBC, es ist /etc/odbc.ini und ~/.odbc.ini). So, die system-DSN kann wissen, wie man auf die Datenbank zugreifen, und Ihr Skript wird verlassen sich auf Sie.
Ich würde raten Vorsicht bei Verwendung von ODBC, obwohl, da Sie nicht haben Zugriff auf einige der komplexeren Funktionen und Abfragen, die einen geraden MySQL-Verbindung benötigt.
InformationsquelleAutor amphetamachine
Ich vielleicht fehlt den Punkt hier, aber lassen Sie mich Fragen.
Warum sind Sie nicht speichern Sie Ihre mysql Verbindungs-Informationen, die in irgendeiner form in der config-Datei enthalten ist, zur Laufzeit, und mit irgendeiner form von Datenbank-Abstraktion, sondern dann würzen Sie Ihren code mit mysql_connects und anderen legacy-Methoden für den Umgang mit Datenbank-verbindungen?
Fände ich es zweifelhaft, dass Ihre automatisierte code-scanning-Lösung Lesen würde Klartext, ini-Dateien oder xml-ini-Dateien, und einige frameworks, Wie Zend, machen es sehr einfach, sich mit diesen Typen von Konfigurations-Dateien, so dass Sie Ihr Passwort nicht gestreut dachte Ihr code oder web zugänglich, an jeder Stelle...
Es klingt wie Sie all die anderen Maßnahmen im Ort(server außerhalb des Netzwerks sicheren mysql-account mit nur die benötigten privs.). Ich bin verkennen, was Sie tun, oder gibt es einen Grund, um zu vermeiden, die best practices hier?
Hinsichtlich
InformationsquelleAutor JC.