web-dev-qa-db-ja.com

User_activation_keyを他の目的に使用する

私はuser_activation_keyWP_Userから(http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321から)他の目的に使用するのが安全であるかどうかを知る必要があります(作成される機能で、作成されたアカウントをアクティブにする前に最初に確認を送信します)。

それで、これは物事がどのように働くかということです。ユーザーは私のカスタム登録フォームを使って登録します。これはフロントエンドでのみ利用可能です。登録が成功すると、次の規約に従って登録時に作成されたアクティベーションリンクに沿ってアカウントが作成されたことが電子メールでユーザーに通知されます。

__コード__

これは安全だと思いますか?

5
mcometa

これは安全だと思いますか?

多分。 2つの問題.

鍵が推測できないことも確認する必要があります。増加する数はありません。 wp_generate_password のようなものを使って、擬似ランダム文字を得ることができます。ランダムな "salt"とユーザーの電子メールアドレスを使用して登録時間またはuniqidを入力すると、一意性を確保して推測できないキーを作成する可能性がかなり高くなります。

$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));

鍵の一意性も保証する必要があります。衝突があってはいけません。

データベースのuser_activation_key列には、一意性を保証するための制約はありません。そのため、それを確実にするのはアプリケーション(WordPressやPHPなど)にかかっています。つまり、キーを生成する前または生成した後に、キーがデータベースに存在していないことを確認してください。テストされていない簡単な例:

<?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.
}

ガイドが必要な場合は、WordPressがパスワードをリセットするEメー​​ルを確認する方法を試してください。プロセスは同じです。推測できないキーを生成し、それが一意であることを確認し、対応するユーザーと一緒にデータベースに挿入してから、パスワードをリセットするためのリンク付きの電子メールを送信します。

6
chrisguitarguy

誰もこれを使用しているので、いいえ、それは安全ではありません。あなたがあなたの電子メールIDを与えることができればそれはそれからあなたが特定のアクティベーションキーまたは番号を参照することですそれは安全です