管理者に送信するメールには、次のようなリンクが含まれている必要があります。
http://www.example.org/admin/remove_account.php?id=123
は登録123
されたユーザーでremove_account.php
、リンクがクリックされたときにロードされるスクリプトです。
スクリプト内では、次のようになります。
mysql_query("DELETE FROM table_name WHERE id=" . mysql_real_escape_string($_GET['id']));
注意
いくつかの注意事項。上記のリンクは、次のいずれかで保護する必要があります。
- ユーザーとパスワードの保護 (Apache または PHP を使用)
- 署名保護 (下の例)
署名保護は、署名を追加することにより、リンク パラメータの改ざん/偽造を防止します。次のように機能します。
$secret = "some reasonably long string of random data";
$id = "123"; // like above, the user id
$sig = hash_hmac('sha1', $id, $secret);
$link = 'http://www.example.org/admin/remove_account.php?' . http_build_query(array(
'id' => $id,
'sig' => $sig,
));
署名を検証するには:
$secret = "some reasonably long string of random data";
if (isset($_GET['id'], $_GET['sig'])) {
$calc_sig = hash_hmac('sha1', $_GET['id'], $secret);
if ($calc_sig === $_GET['sig']) {
// your delete query here
}
}
このリンクは誰かがあなたの管理スクリプトにアクセスしようとするのを防いでくれますが、それが悪意のある者の手に渡った場合、あなたは依然として大失敗をすることに注意してください。セキュリティを過小評価しないでください:)