ホームページ >バックエンド開発 >PHPチュートリアル >PHP で検証リンク用の安全な英数字文字列を生成するにはどうすればよいですか?

PHP で検証リンク用の安全な英数字文字列を生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-23 00:54:15521ブラウズ

How Can I Generate Secure Alphanumeric Strings for Verification Links in PHP?

検証リンク用に一意の英数字文字列を生成する

文字と数字の両方を含むランダムで一意の文字列を作成することは、検証リンクの安全な方法ですアカウント作成プロセスで。この目的で使用できる 2 つの PHP 関数を次に示します。

PHP 7 (推奨)

PHP 7 標準ライブラリには、random_bytes() 関数が含まれています。暗号的に安全な擬似ランダム バイト。

$bytes = random_bytes(20);
echo bin2hex($bytes);

PHP 5 (旧式)

PHP 5 の場合、安全なトークンの生成には openssl_random_pseudo_bytes() を使用することをお勧めします。

echo bin2hex(openssl_random_pseudo_bytes(20));

追加の考慮事項

セキュリティを強化し、トークンの推測を制限するには、次のことをお勧めします。特定の要件を満たすカスタム関数を作成します。これらの要件に対処する包括的な実装は次のとおりです。

function crypto_rand_secure($min, $max) {
    // Calculate and filter random bits
    $bytes = (int) (($max - $min) / 8) + 1;
    $bits = (int) log($max - $min, 2) + 1;
    $filter = (int) (1 << $bits) - 1;

    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd &= $filter;
    } while ($rnd > $range);

    return $min + $rnd;
}

function getToken($length) {
    // Define character set and calculate maximum length
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    $max = strlen($codeAlphabet); // edited

    // Generate token of specified length
    $token = "";
    for ($i = 0; $i < $length; $i++) {
        $token .= $codeAlphabet[crypto_rand_secure(0, $max-1)];
    }

    return $token;
}

この関数は、rand() と mt_rand の安全な代替手段を提供し、生成されたトークンが推測しにくく、必要な基準を満たしていることを保証します。

以上がPHP で検証リンク用の安全な英数字文字列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。