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.
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(); ?>
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 { // 验证码错误,给出错误提示 // ... } } ?>
另一种防止注册刷数据的方法是限制同一IP地址在一段时间内只能注册一定数量的账号。
在数据库的用户表中添加一个register_time
字段和一个register_ip
<?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 { // 执行注册逻辑 // ... } ?>
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); ?>
Dengan mengehadkan bilangan akaun yang didaftarkan dengan alamat IP yang sama, kami boleh menghalang serangan penyisihan data dengan berkesan.
Pengesahan e-melSelain 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 { // 激活码无效,给出错误提示 // ... } ?>
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!