Maison  >  Article  >  développement back-end  >  Processus de mise en œuvre et détails de l'attaque anti-brush d'enregistrement PHP

Processus de mise en œuvre et détails de l'attaque anti-brush d'enregistrement PHP

PHPz
PHPzoriginal
2023-08-27 09:15:261032parcourir

Processus de mise en œuvre et détails de lattaque anti-brush denregistrement PHP

Processus de mise en œuvre et détails des attaques anti-brushing d'enregistrement PHP

Tout d'abord, afin de protéger notre site Web contre les attaques malveillantes d'enregistrement et de brossage de données, nous devons prendre certaines mesures défensives. Cet article présentera le processus de mise en œuvre et les détails des attaques anti-brushing d'enregistrement PHP, et fournira quelques exemples de code.

  1. Captcha Verification

Captcha est une méthode courante pour empêcher l'enregistrement des robots. Sur la page d'inscription, nous pouvons ajouter une zone de saisie du code de vérification et générer une image de code de vérification aléatoire. Les utilisateurs doivent saisir correctement le code de vérification lors de leur inscription pour réussir la vérification.

En PHP, nous pouvons utiliser la bibliothèque GD pour générer des images de code de vérification. Voici un exemple de code simple :

<?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();
?>

Dans la page d'inscription, nous pouvons utiliser <img src="captcha.php" alt="Captcha"> pour afficher l'image du code de vérification, où captcha.php est le nom du fichier où se trouve le code ci-dessus. <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 {
        // 验证码错误,给出错误提示
        // ...
    }
}
?>
  1. IP地址限制

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

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

Lors de la soumission du formulaire d'inscription, nous devons vérifier le code de vérification. Voici un exemple de code simple :

<?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 {
    // 执行注册逻辑
    // ...
}
?>

    Restrictions d'adresse IP

      Une autre façon d'empêcher la suppression des données d'enregistrement consiste à limiter la même adresse IP pour n'enregistrer qu'un certain nombre de comptes dans une période de temps.
    1. Ajoutez un champ register_time et un champ register_ip à la table utilisateur de la base de données, qui représentent respectivement l'heure d'enregistrement et l'adresse IP d'enregistrement.

    Dans la logique d'enregistrement, nous pouvons ajouter le code suivant :

    <?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);
    ?>

    En limitant le nombre de comptes enregistrés avec la même adresse IP, nous pouvons prévenir efficacement les attaques par brossage de données.

    Vérification par e-mail

    De plus, nous pouvons également envoyer un e-mail de vérification à l'adresse e-mail fournie par l'utilisateur lors de l'inscription et demander à l'utilisateur de cliquer sur le lien de vérification pour terminer l'activation du compte.

    Dans la logique d'inscription, nous pouvons ajouter le code suivant :

    <?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 {
        // 激活码无效,给出错误提示
        // ...
    }
    ?>

    Dans la page d'activation, nous pouvons interroger le compte correspondant en fonction du code d'activation et mettre à jour le statut du compte sur activé. Voici un exemple de code simple :

    rrreee🎜Grâce à la vérification des e-mails, nous pouvons garantir que l'adresse e-mail fournie par l'utilisateur est valide et que le processus d'activation du compte est activement déclenché par l'utilisateur, empêchant ainsi tout comportement d'enregistrement malveillant. 🎜🎜Résumé🎜🎜L'attaque anti-swipe d'enregistrement PHP est l'un des moyens importants pour protéger la sécurité des sites Web. Grâce à des méthodes telles que la vérification du code de vérification, les restrictions d'adresse IP et la vérification des e-mails, nous pouvons empêcher efficacement l'enregistrement des robots et les attaques par brossage de données. Lors de la mise en œuvre, nous devons choisir les mesures de défense appropriées en fonction de la situation spécifique et suivre les meilleures pratiques en matière de codage sécurisé. 🎜🎜Les exemples de code fournis ci-dessus sont uniquement à des fins de démonstration, et plus de détails et de problèmes de sécurité doivent être pris en compte dans les applications réelles. Pendant le processus de développement, il est recommandé d'utiliser des frameworks PHP sécurisés, tels que Laravel ou Symfony, pour simplifier le développement et fournir certaines mesures de protection de sécurité de base. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn