2

ユーザーは、単純な登録解除リンクが記載されたメールを送信するスレッドに登録できます。このリンクには、暗号化されたサブスクライブ ID と、このプロセスによる検証ユーザー ID が含まれています。

// generate iv and create encrypted data
$iv = openssl_random_pseudo_bytes(16);
$encrypted = openssl_encrypt($data, 'AES-128-CBC', ENCRYPTION_KEY,0,$iv);

// send the iv along with the encrypted text
$ciphertext = $iv . $encrypted;

// generate a hash which can verify the data has not changed
$hash = hash_hmac('sha1', $ciphertext, ENCRYPTION_KEY)

// encode the data for email link
encoded = urlencode(base_64_encode($hash.$ciphertext))

これにより、次のような文字列が生成されます。

www.site.com?id=YzU4MzAzMjljZWUyYmNmY2JmNjE5MGE0YzVhNDUzZjI0YmJmZWI3YoyqdFj6dxA/OVJOw2UN7HErYVV5dmhUVEJzVHBsUGd3aDNHbjVYbmFMa0dhUFczSmpXWnFBN0FyVGxkVml3S041VlhsSXd6TitJYld5QmdhWEFkL3hYSDFiRWdzN0wvNjFXYURiYlNreXpLQ1ZqWnhHMmdCSlZGaUVxU3ZGY3I3RW9GZkJYN3l4Vkp3YmJicg

サーバー側では、データとハッシュを検証し、データに含まれるユーザー ID に対して subscribeid が有効であることを確認してから、subscribe レコードに期限切れのマークを付けます。

一時的なログイン (有効期限付きのログイン) 用にこの暗号化を開発しましたが、単純な登録解除リンクに対して 250 文字の文字列はやり過ぎですか? 主な問題は、URL とプレーン テキストのメールでは見苦しいことのようです。また、プレーン テキストの電子メール クライアントでリンクが壊れるリスクもあります。

これがハッキングされた場合、最も危険にさらされるのは、サブスクライブ レコードが期限切れとしてマークされることです。オーバーキル(またはその他)について心配する必要があります。より簡単で安全な方法はありますか? 私は暗号化の初心者です。基本的な質問は、どれくらいで十分ですか?

4

1 に答える 1

2

より単純な方法は、特定の長さ (30 文字など) のランダムな文字列をテーブルに格納し、uniqueそのフィールドに制約を加えることです。そのランダムな値は、データベース以外には意味がなく、情報が含まれていないため復号化できません。where句で使用してそのテーブルのレコードを検索する場合にのみ、意味があります。

于 2015-03-13T21:15:10.083 に答える