从一个号码创建一个唯一的验证码?
Creating a unique verification code from a single number?
我正在制作一个提供表单的插件,让任何人都可以向我的 Wordpress 网站提交 post(自定义 post 类型)。不过,我正在寻找一种非常基本的阻止方法 bots/spammers,所以我想通过电子邮件发送一个确认码,他们可以单击该确认码并将状态更改为已发布。
我不想在数据库中存储任何东西,所以我想只发送类似 "verification.php?id=12" 的东西,其中 ID 是 post ID。不过这很明显,所以我想让那个数字看起来更复杂,然后 "decrypt" 它在单击 link 时显示实际的 Post ID。
伪代码:
If ($_GET['veriID'] != '')
$lastchar = substr($_GET['veriID'], -1);
publish_post($lastchar);
实现这一目标有哪些选择?我应该只生成一个随机字符串并将 post ID 附加到末尾还是有更好的方法?
您始终可以将 post ID 编码为 base64,然后在确认后解码。
这对大多数程序员来说是相对明显的,但对普通用户来说不一定。
您可以使用 HMAC 对请求进行身份验证。生成的 url 将如下所示:
.../verification.php?post=12&hash=5f13532e49447facaa3dce9080bfffec3c6731eca6b4d590670dd0b1137e7476
要生成哈希,使用 HMAC algorithm。这具有使用秘密值的优点。因此,该值不能由消息(post id)单独计算。
生成哈希值的代码:
define('secret', 'really super secret value');
$post_id = 12;
// Get the hash
echo hash_hmac('sha256', $post_id, secret);
您可以将秘密存储为常数值或更好:每个 plugin-installation.
由于您始终可以从 post-id 计算散列,因此无需将数据存储在数据库中。
一种简单的方法是向您的 post 添加一个自定义字段并像这样在其中存储一个随机代码
$code = '';
for ( $i = 1; $i <= 3; ++$i ) {
$code .= chr(rand(97,122)) . rand(0,9);
}
这是真的,它存储在数据库 post 元数据中,但您不会明确地这样做,而是按照 WP 的工作方式使用:
get_post_meta( $post_id, $key, true );
我正在制作一个提供表单的插件,让任何人都可以向我的 Wordpress 网站提交 post(自定义 post 类型)。不过,我正在寻找一种非常基本的阻止方法 bots/spammers,所以我想通过电子邮件发送一个确认码,他们可以单击该确认码并将状态更改为已发布。
我不想在数据库中存储任何东西,所以我想只发送类似 "verification.php?id=12" 的东西,其中 ID 是 post ID。不过这很明显,所以我想让那个数字看起来更复杂,然后 "decrypt" 它在单击 link 时显示实际的 Post ID。
伪代码:
If ($_GET['veriID'] != '')
$lastchar = substr($_GET['veriID'], -1);
publish_post($lastchar);
实现这一目标有哪些选择?我应该只生成一个随机字符串并将 post ID 附加到末尾还是有更好的方法?
您始终可以将 post ID 编码为 base64,然后在确认后解码。
这对大多数程序员来说是相对明显的,但对普通用户来说不一定。
您可以使用 HMAC 对请求进行身份验证。生成的 url 将如下所示:
.../verification.php?post=12&hash=5f13532e49447facaa3dce9080bfffec3c6731eca6b4d590670dd0b1137e7476
要生成哈希,使用 HMAC algorithm。这具有使用秘密值的优点。因此,该值不能由消息(post id)单独计算。
生成哈希值的代码:
define('secret', 'really super secret value');
$post_id = 12;
// Get the hash
echo hash_hmac('sha256', $post_id, secret);
您可以将秘密存储为常数值或更好:每个 plugin-installation.
由于您始终可以从 post-id 计算散列,因此无需将数据存储在数据库中。
一种简单的方法是向您的 post 添加一个自定义字段并像这样在其中存储一个随机代码
$code = '';
for ( $i = 1; $i <= 3; ++$i ) {
$code .= chr(rand(97,122)) . rand(0,9);
}
这是真的,它存储在数据库 post 元数据中,但您不会明确地这样做,而是按照 WP 的工作方式使用:
get_post_meta( $post_id, $key, true );