it-swarm.com.de

Verwenden Sie den user_activation_key für andere Zwecke

Ich möchte wissen, ob es sicher ist, user_activation_key (von WP_User) für andere Zwecke wie die E-Mail-Bestätigung zu verwenden (eine Funktion, die ich erstellen würde und die zuerst eine E-Mail-Bestätigung sendet, bevor ich das erstellte Konto aktiviere).

So werden die Dinge also funktionieren. Ein Benutzer registriert sich mit meinem benutzerdefinierten Registrierungsformular, das nur im Front-End verfügbar ist. Nach erfolgreicher Registrierung wird der Benutzer per E-Mail darüber informiert, dass das Konto über den Aktivierungslink erstellt wurde, der bei der Registrierung gemäß der folgenden Konvention erstellt wurde:

http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321

Glaubst du, das wird sicher sein?

5
mcometa

Glaubst du, das wird sicher sein?

Könnte sein. Zwei Probleme.

Sie müssen auch sicherstellen, dass der Schlüssel nicht erraten werden kann. Keine inkrementellen Zahlen. Sie können so etwas wie wp_generate_password verwenden, um einige pseudozufällige Zeichen zu erhalten. Verwenden Sie ein zufälliges "Salt" plus die E-Mail-Adresse des Benutzers und die Anmeldezeit oder uniqid, und Sie haben eine gute Chance, die Eindeutigkeit sicherzustellen (siehe unten) und einen nicht erratbaren Schlüssel zu erstellen.

$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // 20 character "random" string
$key = sha1($salt . $user_email . uniqid(time(), true));

Sie müssen auch die Eindeutigkeit des Schlüssels sicherstellen: Es sollten keine Kollisionen auftreten.

Es gibt keine Einschränkungen für die Spalte user_activation_key in der Datenbank, die die Eindeutigkeit sicherstellen. Es liegt also an Ihrer App (z. B. WordPress und die Seite von PHP), um sicherzustellen, dass dies der Fall ist. Mit anderen Worten: Stellen Sie entweder vor oder nach dem Generieren des Schlüssels sicher, dass er nicht bereits in der Datenbank vorhanden ist. Einfaches, ungetestetes Beispiel:

<?php
$key = some_function_that_generates_a_key();
$res = $wpdb->get_col($wpdb->prepare("SELECT EXISTS(SELECT 1 FROM {$wpdb->users} WHERE user_activation_key = %s)", $key));
if ($res) {
    // the key exists, try again!
} else {
    // good to go.
}

Wenn Sie eine Anleitung benötigen, sehen Sie sich an, wie WordPress E-Mails zum Zurücksetzen von Passwörtern verwendet. Der Vorgang ist der gleiche: Erstellen Sie einen nicht erratbaren Schlüssel, vergewissern Sie sich, dass er eindeutig ist, fügen Sie ihn mit dem entsprechenden Benutzer in die Datenbank ein und senden Sie ihm eine E-Mail mit einem Link zum Zurücksetzen des Kennworts.

6
chrisguitarguy

Nein, es ist nicht sicher, weil jemand dies verwendet. Wenn Sie jedoch Ihre E-Mail-ID angeben können, werden Sie auf einen bestimmten Aktivierungsschlüssel oder eine bestimmte Aktivierungsnummer verwiesen. Dann ist dies sicher