Übernehmen Sie die function update_option Variable

Ich habe hier einige statementen zum Verschlüsseln eines Optionsfeldes für ein Plugin gefunden .

encrypt($input_string, $key){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $h_key = hash('sha256', $key, TRUE); return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $h_key, $input_string, MCRYPT_MODE_ECB, $iv)); 

Und hier empfehlen wir WPs Portable PHP Password Hashing Framework:

 require_once( '/path/to/wp-includes/class-phpass.php' ); $wp_hasher = new PasswordHash( 8, TRUE ); $password = 'swordfish'; $hashed_password = $wp_hasher->HashPassword( $password ); 

Aber ich habe Probleme, weil ich das entschlüsselte Passwort (wenn gesetzt) ​​im Formularfeld anzeigen möchte, bin mir aber nicht sicher, wie ich es dann verschlüsseln soll, bevor ich es an die DB sende.

Der aktuelle Code lautet wie folgt:

 // Register and define the settings add_action('admin_init', 'my_plugin_admin_init'); function my_plugin_admin_init(){ register_setting( 'my_plugin_options', 'my_plugin_options', 'my_plugin_validate_options' ); add_settings_section( 'my_plugin_main', 'The Credentials', 'my_plugin_section_text', 'my_plugin' ); // Display and fill the form field function my_plugin_password() { $options = get_option( 'my_plugin_options',__('Option Not Set') ); if (isset($options['my_plugin_password'])) { $my_plugin_password = decrypt($options, $options['my_plugin_password'], SECURE_AUTH_SALT); $my_plugin_password_enc = encrypt($my_plugin_password, SECURE_AUTH_SALT); } else { $my_plugin_password = _e('YOUR PASSWORD'); $my_plugin_password_enc = ''; } // echo the field echo ""; } add_settings_field( 'my_password', 'Enter Password: ', 'my_password', 'my_plugin', 'my_plugin_main' ); 

Und ich denke, was jetzt passiert ist, dass ein unverschlüsseltes Passwort in etwas wie diese entschlüsselt wird: @H! f46vQa , v 3 1 (Ȥ

Die “verschlüsselte” sieht am Ende wie die Eingabezeichenfolge aus, gefolgt von einer Zeichenfolge von A s.

Muss ich irgendwo einen update_option Anruf hinzufügen?

Ich frage mich auch, ob es sicherer ist, das Verschlüsseln und Entschlüsseln mit JavaScript durchzuführen, so dass nur verschlüsselte Zeichenfolgen den Client verlassen. Aber ich bin mir nicht sicher, wie das funktionieren würde, wenn sich ein Benutzer von einem anderen Client anmeldet.

Solutions Collecting From Web of "Übernehmen Sie die function update_option Variable"

Es gibt keinen sicheren Weg, ein Passwort zu verschlüsseln, das auch reversibel ist. Der springende Punkt einer Hash-function, wie sie für Passwörter verwendet wird, ist, dass es in eine Richtung geht.

Sie können es verschlüsseln, nicht entschlüsseln.

Wenn das Kennwort entschlüsselt werden kann, ist die Verschlüsselung möglicherweise nicht vorhanden. Die Verschlüsselung von Passwörtern in der database hat den Zweck, dass, wenn jemand Lesezugriff auf die database erhält, sie nicht herausfinden können, was Ihre Passwörter sind. Alles, was sie sehen, ist Zufall. Da es nicht umkehrbar ist, können sie es nicht selbst entschlüsseln.

Sie sagen, dass Sie Informationen in der database in einer verschlüsselten Form speichern müssen, aber Sie sagen nicht, warum Sie dies tun müssen. Vor welcher spezifischen Art von Bedrohung oder Angriff schützen Sie genau? Jede Art von Angriff hat Gegenmaßnahmen, Sie verschlüsseln nicht nur, weil Verschlüsselung magisch Dinge sicherer macht, Sie verschlüsseln auf spezifische Weise, um bestimmte Bedrohungen zu mindern.

Wenn Sie beispielsweise mit einem Dienst kommunizieren, sollten Sie OAuth2 o.ä. verwenden, um die Verbindung der beiden Dienste ohne die Verwendung von Kennwörtern herzustellen.

Suchen Sie nach einer besseren Lösung auf hohem Niveau. Wenn Sie Kennwörter verschlüsseln und diese dann auch entschlüsseln müssen, haben Sie das ursprüngliche Konzept vermutlich falsch gemacht.

Sie können Optionen abfangen, die gespeichert werden, bevor sie mit einer Aktion und einem Filter auf die database zugreifen.

https://codex.wordpress.org/Plugin_API/Filter_Reference/pre_update_option_(optionsname)