1

電子メールのリンクを使用して mysql データベースからエントリを削除する安全な方法は何ですか? サイトにログインしているユーザーがエントリを作成できる場合があります。その後、自分のアカウントでエントリが作成されたという電子メールを受け取りますが、後でそれが望ましくないエントリであることが判明した場合は、リンクを使用してそのエントリを削除できます。何かのようなもの:

domain.com/index.php?task=delete&id=1

これを行うための安全な方法は何ですか? URL にある種のセキュリティ トークンを追加することは想像できますが、リクエスト全体を生成して検証するにはどうすればよいでしょうか。

4

2 に答える 2

1

私はあなたのデータベースがあなたのためにこれを処理できるようにするだけautoincrement ですmd5(uniqid(rand(), TRUE));

for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}

出力:

php index.php 
ba0d9aad1ff0ceadf4b25f101099b91e
b5a6db5e174b426061d3d3835a6fcaea
54be6d3a03e0590917ed20b097442e3a
6e208a61eae8cfd102d4a41decf0f64e
2cafac5402815af87e8299e5e67016bd
95e839097a566471c70fe357e5a101d2
c6908532bda6f926debdda754b02f931
aac7adf999dd4dd009f208b176ea90d0
1ed7779229e57b05adc088b375582cfb
e016a684564d5cdb89201ebab1038609

可能であればこの出力を別の列に保存するか、デコード関数を使用して実際の ID に変換します

于 2013-07-20T13:48:30.257 に答える
0

私が考えることができる2つの方法は次のとおりです。

  1. データベース エントリの一部としてランダムな「アクセス トークン」を保存します。トークンには、少なくとも 64 ビットのエントロピーが必要です。削除リンクにトークンを含め、間違ったトークンによる削除の試行を拒否します。

  2. 上記と同じですが、データベースにトークンを保存する代わりに、メッセージ認証コード( HMACなど) と秘密鍵を使用してレコード ID からトークンを計算します。

どちらの場合でも、リンクは次のようになります。

http://domain.com/index.php?task=delete&id=1&token=d7a8fbb307d78094

2 番目の方法の利点の 1 つは、ストレージ スペースを節約することに加えて、MAC を計算する「メッセージ」にアクションを含めるだけで、アクションごとに異なるトークンを使用できることです。たとえば、上記のトークンはメッセージ " delete 1" に対して計算される可能性がありますが、" edit 1" はまったく異なる MAC を持つことになります。

hash_hmac()PHP では、MAC の計算に使用できます。

于 2013-07-20T21:36:44.070 に答える