Ich entwickle gerade ein Plugin und die Chancen stehen gut, dass ich es höchstwahrscheinlich im öffentlichen Plugin-Repository veröffentlichen werde, damit andere es verwenden können.
Das Plugin verwendet eine API. Um diese API zu verwenden, müssen Sie einen Benutzernamen und ein Kennwort übergeben. Daher muss mein Plugin diese Anmeldeinformationen in der Datenbank speichern. Ich möchte diese nicht im Klartext speichern, obwohl die API sie im Klartext benötigt.
Meine Frage ist also, wie ich diese sensiblen Informationen speichere. Hashing ist out, also muss es eine Art Verschlüsselung sein.
Gibt es in WordPress einen eindeutigen Schlüssel, der von Blog zu Blog unterschiedlich sein kann? Welche PHP-Funktionen soll ich zum Ver- und Entschlüsseln verwenden? Ich suche nach Funktionen, die höchstwahrscheinlich auf allen WP-Installationen funktionieren.
Antworten:
Ich bin mit den vorherigen Antworten einverstanden. Um die Frage zu beantworten, die Sie tatsächlich gestellt haben, fällt mir ein, eine der folgenden Konstanten für wp-config.php zu verwenden:
Sie sollen für alle WordPress-Installationen einzigartig sein - und sind die einzigen Optionen, die in WordPress für bereits vorhandene Schlüssel zur Verfügung stehen. Alternativ können Sie eine eigene ähnliche Konstante hinzufügen, die erstellt wird, indem Sie eine dieser Konstanten mit der Administrator-E-Mail-Adresse oder einer ähnlichen Konstante abgleichen und diese dann in einer verborgenen Einstellungsoption speichern, um zu verhindern, dass Sie Ihren Schlüssel verlieren, wenn jemand versehentlich die Schlüssel nach Ihrer Änderung ändert Plugin ist installiert. Die Gefahr besteht darin, dass der Administrator / Websitebesitzer den Fehler nicht versehentlich verschlüsselt, wenn er bei der Erstinstallation nicht eindeutig festgelegt wurde.
Was die Verschlüsselungs- / Entschlüsselungsfunktionen betrifft, gibt eine schnelle Google-Suche die folgende Auflistung mit dem Code zurück, der zur Rechnung passt: http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong- verschlüsselung-entschlüsselung-php-funktionen /
Hier finden Sie eine Dokumentation der hier verwendeten AES-Verschlüsselung: http://www.chilkatsoft.com/p/php_aes.asp
quelle
Dies ist genau der Umstand, für den OAuth entwickelt wurde.
Von der OAuth-Homepage :
Der Vorteil von OAuth ist, dass Sie das Kennwort des Benutzers nicht speichern müssen. Beim ersten Einrichten des Plugins werden Sie aufgefordert, sich über die Anwendung mit einem Benutzernamen und einem Kennwort anzumelden (normalerweise eine Seite, die auf demselben Server wie die API gehostet und entweder in einer Seitenumleitung, einer Thickbox oder einem Iframe geladen wird). .
Sobald der Benutzer angemeldet ist, erstellt der Server (Ihr System) einen sicheren Schlüssel, mit dem sein System (WordPress) eine Schnittstelle zur API herstellen kann. Dieser Schlüssel ist für das Benutzerkonto und die Site eindeutig - und gibt der Anwendung (in WordPress) die Berechtigung, im Namen des Benutzers Dinge mit der API zu tun, ohne jedes Mal ihre Authentifizierungsinformationen weiterzugeben.
Wenn Sie ein Beispiel dafür in Aktion sehen möchten, schauen Sie sich Jetpack an .
Wenn Sie das Plugin aktivieren, beschwert es sich, dass es nicht verbunden ist. Wenn Sie eine Verbindung herstellen, geben Sie Ihre Anmeldeinformationen über WordPress.com ein und richten die OAuth-Interaktion zwischen WordPress und deren API ein.
Sie müssen dies jedoch nur einmal tun und Ihr WordPress.com-Benutzername / Passwort wird niemals in Ihrer lokalen WordPress-Datenbank gespeichert.
quelle
Dies ist ein wichtiges Problem, da viele Dienste OAuth immer noch nicht unterstützen und das Speichern von Kennwörtern in der Optionsdatenbank sie für jedes einzelne Wordpress-Plugin lesbar macht (siehe meinen Kommentar oben).
Dies ist (noch) keine echte Antwort auf die Frage, aber auch zu lang für einen Kommentar. Ich hoffe, hiermit eine Diskussion anzustoßen, um die "bestmögliche" Lösung für dieses "unlösbare" Problem zu finden.
Die Grundidee, die mich denken lässt, dass das Verschlüsseln von Passwörtern möglich ist, ist folgende:
Es gibt eine geheime Information, die jeder Benutzer hat: sein Wordpress-Passwort. Es sollte möglich sein, Anmeldeinformationen für Dienste von Drittanbietern zu speichern, die mit einem geheimen, von diesem Kennwort abgeleiteten Kennwort verschlüsselt sind, und diese nur zu entschlüsseln, wenn der Benutzer angemeldet ist.
Auf diese Weise sollte es zumindest unmöglich sein, die Passwörter aus einer Kopie der Wordpress-Dateien und -Datenbank zu stehlen. Es kann nicht das Problem lösen, dass andere Plugins Anmeldeinformationen stehlen, da jedes Plugin das Klartextkennwort während der Anmeldung erfassen kann.
Die eigentliche Entschlüsselung ist recht einfach: Angenommen, wir haben bereits eine verschlüsselte Version des Drittanbieter-Dienstes in der Datenbank gespeichert, können den
'authenticate'
Filter einbinden oder durch Überschreiben derwp_authenticate()
Funktion einen gesalzenen Hash des Klartext-Benutzerpassworts (von) generieren Mittel vonwp_hash_password()
), speichern Sie dieses gehashte Kennwort als Verschlüsselungsschlüssel an einem privaten Ort, bis sich der Benutzer abmeldet (verwenden Sie den'wp_logout'
Haken, um den Schlüssel zu löschen), und verwenden Sie ihn jedes Mal, wenn Sie das Kennwort eines Drittanbieters zum Entschlüsseln des verschlüsselten Werts in der Datenbank benötigen.Während ich das Gefühl habe, dass es möglich sein sollte, diese Arbeit zu machen, gibt es jedoch einige ungelöste Probleme:
'authenticate'
. Der Benutzer könnte aufgefordert werden, sich anzumelden, um den Zeitraum bis dahin kurz zu halten.'authenticate'
nur ausgeführt wird, wenn sich der Benutzer tatsächlich anmeldet?quelle