Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP menyedari fungsi anti-swipe automatik kod pengesahan e-mel

PHP menyedari fungsi anti-swipe automatik kod pengesahan e-mel

WBOY
WBOYasal
2023-09-13 08:52:50561semak imbas

PHP menyedari fungsi anti-swipe automatik kod pengesahan e-mel

Tajuk: PHP merealisasikan fungsi anti-leret automatik kod pengesahan e-mel

Dengan populariti Internet dan penggunaan aplikasi yang meluas, kod pengesahan e-mel telah menjadi kaedah pengesahan yang biasa digunakan dalam banyak tapak web dan aplikasi. Walau bagaimanapun, kerana kekerapan penghantaran kod pengesahan terlalu tinggi, ia akan memberi beban tambahan pada pelayan dan boleh digunakan dengan mudah oleh pengguna berniat jahat untuk meleret kod pengesahan SMS. Untuk menyelesaikan masalah ini, fungsi anti-leret automatik kod pengesahan e-mel boleh dilaksanakan dalam PHP. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi ini, dan melampirkan contoh kod tertentu.

1. Jana kod pengesahan e-mel

Pertama, kita perlu menjana kod pengesahan e-mel. Dalam PHP, anda boleh menggunakan fungsi nombor rawak rand() untuk menjana kod pengesahan rawak dengan panjang yang ditentukan. Contoh kod adalah seperti berikut:

function generateEmailCode($length) {
    $code = '';
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charLength = strlen($chars);

    for ($i = 0; $i < $length; $i++) {
        $code .= $chars[rand(0, $charLength - 1)];
    }

    return $code;
}

Dalam kod di atas, fungsi generateEmailCode() menerima panjang parameter, yang digunakan untuk menentukan panjang kod pengesahan yang dijana. Secara dalaman, fungsi menggunakan fungsi rand() untuk menjana nombor rawak dan menjana kod pengesahan berdasarkan set aksara yang ditentukan. Akhirnya, kod pengesahan yang dijana dikembalikan.

2. Kira kekerapan menghantar kod pengesahan

Untuk mengelakkan pengguna daripada kerap meleret kod pengesahan, kami perlu mengira kekerapan menghantar kod pengesahan. Apabila melaksanakan fungsi anti-leret automatik, kami boleh menggunakan pangkalan data untuk merekodkan masa apabila setiap alamat e-mel menghantar kod pengesahan, dan mengira selang masa untuk menghantar kod pengesahan. Jika selang masa kurang daripada ambang yang ditetapkan, ia akan dinilai sebagai tingkah laku memberus dan kod pengesahan akan ditolak untuk dihantar.

Pertama, kita perlu mencipta jadual pangkalan data untuk merekodkan masa penghantaran kod pengesahan, termasuk alamat e-mel, masa penghantaran dan medan lain. Contoh kod adalah seperti berikut:

CREATE TABLE `email_verification` (
    `email` varchar(255) NOT NULL,
    `send_time` datetime NOT NULL
);

Seterusnya, tulis fungsi checkEmailFrequency() yang menyemak kekerapan penghantaran kod pengesahan. Contoh kod adalah seperti berikut:

function checkEmailFrequency($email, $threshold) {
    $conn = mysqli_connect('localhost', 'username', 'password', 'database');

    if (!$conn) {
        die('数据库连接失败');
    }

    $query = "SELECT send_time FROM email_verification WHERE email = '$email' ORDER BY send_time DESC LIMIT 1";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_assoc($result);

    if ($row) {
        $lastSendTime = strtotime($row['send_time']);
        $currentTime = time();
        $timeDiff = $currentTime - $lastSendTime;

        if ($timeDiff < $threshold) {
            return false;
        }
    }

    return true;
}

Dalam kod di atas, fungsi checkEmailFrequency() menerima dua parameter, iaitu alamat e-mel dan ambang. Di dalam fungsi, sambungan pangkalan data mula-mula diwujudkan, kemudian masa penghantaran terakhir peti mel tertentu ditanya, dan selang masa dikira. Jika selang masa kurang daripada ambang, kembalikan palsu untuk menunjukkan tingkah laku leret jika tidak, kembalikan benar untuk membenarkan penghantaran kod pengesahan.

3. Hantar kod pengesahan e-mel

Apabila menghantar kod pengesahan e-mel, mula-mula panggil fungsi checkEmailFrequency() untuk menyemak kekerapan penghantaran kod pengesahan. Jika benar dikembalikan, kod pengesahan boleh dihantar jika tidak, kod pengesahan tidak akan dihantar dan gesaan ralat yang sepadan akan diberikan. Contoh kod adalah seperti berikut:

$email = 'user@example.com';
$threshold = 60; // 阈值设为60秒

if (checkEmailFrequency($email, $threshold)) {
    $verificationCode = generateEmailCode(6); // 生成6位验证码

    // 发送验证码的逻辑代码

    // 记录验证码的发送时间
    $conn = mysqli_connect('localhost', 'username', 'password', 'database');

    if (!$conn) {
        die('数据库连接失败');
    }

    $query = "INSERT INTO email_verification (email, send_time) VALUES ('$email', NOW())";
    mysqli_query($conn, $query);
} else {
    echo '验证码发送过于频繁,请稍后再试。';
}

Dalam kod di atas, $email ialah alamat e-mel yang perlu dihantar kod pengesahan dan $threshold ialah ambang yang ditetapkan. Mula-mula panggil fungsi checkEmailFrequency() untuk menyemak kekerapan penghantaran Jika benar dikembalikan, kod pengesahan akan dihantar dan masa penghantaran akan direkodkan.

4. Ringkasan

Melalui langkah di atas, kami telah berjaya melaksanakan fungsi anti-leret automatik untuk kod pengesahan e-mel dalam PHP. Melalui langkah seperti menjana kod pengesahan, mengira kekerapan penghantaran dan menghantar kod pengesahan, ia berkesan menghalang pengguna daripada menyalahgunakan kod pengesahan. Pada masa yang sama, kami juga memperkenalkan secara ringkas contoh kod khusus untuk memudahkan pembangun menggunakannya dengan cepat. Saya harap artikel ini akan membantu anda memahami cara melaksanakan fungsi anti-leret automatik kod pengesahan e-mel.

Atas ialah kandungan terperinci PHP menyedari fungsi anti-swipe automatik kod pengesahan e-mel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn