首頁 >後端開發 >php教程 >如何在 PHP 中產生用於驗證連結的安全字母數字字串?

如何在 PHP 中產生用於驗證連結的安全字母數字字串?

Susan Sarandon
Susan Sarandon原創
2024-12-23 00:54:15569瀏覽

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

為驗證連結產生唯一的字母數字字串

建立包含字母和數字的隨機唯一字串是驗證連結的安全方法在帳戶建立過程中。以下是兩個可用於此目的的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn