Proses pelaksanaan dan butiran serangan anti-berus pendaftaran PHP

PHPz
Lepaskan: 2023-08-27 09:16:01
asal
997 orang telah melayarinya

Proses pelaksanaan dan butiran serangan anti-berus pendaftaran PHP

Proses pelaksanaan dan butiran serangan anti-memberus pendaftaran PHP

Pertama sekali, untuk melindungi tapak web kami daripada pendaftaran berniat jahat dan serangan memberus data, kami perlu mengambil beberapa langkah pertahanan. Artikel ini akan memperkenalkan proses pelaksanaan dan butiran serangan anti-memberus pendaftaran PHP, dan memberikan beberapa contoh kod.

  1. PENGESAHAN CAPTCHA

Captcha ialah kaedah biasa untuk menghalang pendaftaran bot. Pada halaman pendaftaran, kami boleh menambah kotak input kod pengesahan dan menjana imej kod pengesahan rawak. Pengguna perlu memasukkan kod pengesahan dengan betul semasa mendaftar untuk lulus pengesahan.

Dalam PHP, kami boleh menggunakan perpustakaan GD untuk menjana imej kod pengesahan. Berikut ialah contoh kod mudah:

<?php
session_start();

// 生成验证码
function generateCaptcha() {
    $image = imagecreatetruecolor(100, 40);
    $bgColor = imagecolorallocate($image, 255, 255, 255);
    $textColor = imagecolorallocate($image, 0, 0, 0);
    
    imagefilledrectangle($image, 0, 0, 100, 40, $bgColor);
    
    $captcha = '';
    $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    for ($i = 0; $i < 6; $i++) {
        $captcha .= $characters[rand(0, strlen($characters) - 1)];
    }
    
    $_SESSION['captcha'] = $captcha;
    
    imagettftext($image, 20, 0, 10, 30, $textColor, 'arial.ttf', $captcha);
    
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
}

// 输出验证码图片
generateCaptcha();
?>
Salin selepas log masuk

Dalam halaman pendaftaran, kami boleh menggunakan <img src="captcha.php" alt="Captcha"> untuk memaparkan imej kod pengesahan, dengan captcha.php ialah nama fail di mana kod di atas terletak. <img src="captcha.php" alt="Captcha">来显示验证码图片,其中captcha.php是上述代码所在的文件名。

在提交注册表单时,我们需要对验证码进行验证。以下是一个简单的代码示例:

<?php
session_start();

if (isset($_POST['captcha'])) {
    $captcha = $_POST['captcha'];
    if (strtolower($captcha) === strtolower($_SESSION['captcha'])) {
        // 验证码正确,执行注册逻辑
        // ...
    } else {
        // 验证码错误,给出错误提示
        // ...
    }
}
?>
Salin selepas log masuk
  1. IP地址限制

另一种防止注册刷数据的方法是限制同一IP地址在一段时间内只能注册一定数量的账号。

在数据库的用户表中添加一个register_time字段和一个register_ip

Semasa menghantar borang pendaftaran, kami perlu mengesahkan kod pengesahan. Berikut ialah contoh kod mudah:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$timeLimit = time() - 24 * 60 * 60; // 限制为24小时内只能注册一个账号
$maxRegistration = 5; // 限制为每天只能注册5个账号

// 查询同一IP地址在一段时间内注册的账号数量
$sql = "SELECT COUNT(*) FROM users WHERE register_ip = ? AND register_time > ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$ip, $timeLimit]);
$count = $stmt->fetchColumn();

if ($count >= $maxRegistration) {
    // 超出限制,给出错误提示
    // ...
} else {
    // 执行注册逻辑
    // ...
}
?>
Salin selepas log masuk

    Sekatan alamat IP

      Cara lain untuk menghalang data pendaftaran daripada disikat adalah dengan mengehadkan alamat IP yang sama untuk hanya mendaftarkan bilangan akaun tertentu dalam suatu tempoh masa.
    1. Tambah medan register_time dan medan register_ip pada jadual pengguna pangkalan data, yang mewakili masa pendaftaran dan alamat IP pendaftaran masing-masing.

    Dalam logik pendaftaran, kami boleh menambah kod berikut:

    <?php
    // 生成一个随机的激活码
    $activationCode = md5(uniqid(rand(), true));
    
    // 将激活码保存到数据库的用户表中
    $sql = "UPDATE users SET activation_code = ? WHERE email = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$activationCode, $email]);
    
    // 发送验证邮件
    $to = $email;
    $subject = '账号激活';
    $message = "请点击以下链接激活您的账号:
    
    ";
    $message .= "http://example.com/activate.php?code=" . urlencode($activationCode);
    $headers = 'From: webmaster@example.com' . "
    " . 'Reply-To: webmaster@example.com' . "
    ";
    mail($to, $subject, $message, $headers);
    ?>
    Salin selepas log masuk

    Dengan mengehadkan bilangan akaun yang didaftarkan dengan alamat IP yang sama, kami boleh menghalang serangan penyisihan data dengan berkesan.

    Pengesahan e-mel

    Selain itu, kami juga boleh menghantar e-mel pengesahan ke alamat e-mel yang diberikan oleh pengguna semasa pendaftaran, dan memerlukan pengguna mengklik pautan pengesahan untuk melengkapkan pengaktifan akaun.

    Dalam logik pendaftaran, kami boleh menambah kod berikut:

    <?php
    $code = $_GET['code'];
    
    // 根据激活码查询对应的账号
    $sql = "SELECT * FROM users WHERE activation_code = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$code]);
    $user = $stmt->fetch();
    
    if ($user) {
        // 更新账号状态为已激活
        $sql = "UPDATE users SET status = 'activated' WHERE id = ?";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$user['id']]);
    } else {
        // 激活码无效,给出错误提示
        // ...
    }
    ?>
    Salin selepas log masuk

    Dalam halaman pengaktifan, kami boleh menanyakan akaun yang sepadan berdasarkan kod pengaktifan dan mengemas kini status akaun untuk diaktifkan. Berikut ialah contoh kod mudah:

    rrreee🎜Melalui pengesahan e-mel, kami boleh memastikan bahawa alamat e-mel yang diberikan oleh pengguna adalah sah, dan proses pengaktifan akaun dicetuskan secara aktif oleh pengguna, dengan itu menghalang tingkah laku pendaftaran yang berniat jahat. 🎜🎜Ringkasan🎜🎜Serangan anti-berus pendaftaran PHP adalah salah satu cara penting untuk melindungi keselamatan laman web. Melalui kaedah seperti pengesahan kod pengesahan, sekatan alamat IP dan pengesahan e-mel, kami boleh menghalang pendaftaran robot dan serangan memberus data dengan berkesan. Apabila melaksanakan, kita perlu memilih langkah pertahanan yang sesuai berdasarkan situasi khusus dan mengikuti amalan terbaik untuk pengekodan selamat. 🎜🎜Contoh kod yang disediakan di atas hanya untuk tujuan demonstrasi dan butiran lanjut serta isu keselamatan perlu dipertimbangkan dalam aplikasi sebenar. Semasa proses pembangunan, adalah disyorkan untuk menggunakan rangka kerja PHP yang selamat, seperti Laravel atau Symfony, untuk memudahkan pembangunan dan menyediakan beberapa langkah perlindungan keselamatan asas. 🎜

    Atas ialah kandungan terperinci Proses pelaksanaan dan butiran serangan anti-berus pendaftaran PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!