Position actuelle: Accueil> Derniers articles> Meilleures pratiques de sécurité pour PHP afin d'éviter les attaques de balayage d'enregistrement

Meilleures pratiques de sécurité pour PHP afin d'éviter les attaques de balayage d'enregistrement

M66 2025-06-20

Meilleures pratiques de sécurité pour PHP afin d'éviter les attaques de balayage d'enregistrement

Avec le développement d'Internet, les fonctions d'enregistrement sont devenues de plus en plus courantes dans divers sites Web et applications, mais en même temps, cela est devenu un point d'entrée que les attaquants utilisent souvent. L'une des méthodes d'attaque courantes est l'attaque de balayage du nombre. L'attaquant enregistre un grand nombre de comptes via des programmes automatisés, consomme des ressources du serveur et détruit les services normaux. Pour faire face à de telles attaques, il est particulièrement important de prendre des mesures préventives efficaces. Voici quelques meilleures pratiques pour protéger la sécurité des capacités d'enregistrement PHP.

1. Ajouter une vérification d'interaction anti-humaine

Les attaques à glisser utilisent généralement des outils d'automatisation pour soumettre rapidement les demandes d'enregistrement, tandis que les utilisateurs réels doivent interagir les uns avec les autres pour effectuer l'enregistrement. En ajoutant une vérification anti-humaine, l'enregistrement automatisé peut être bloqué efficacement.

Les méthodes courantes de vérification d'interaction anti-humaine comprennent les codes de vérification, la vérification coulissante, la vérification du numéro de téléphone, etc. Google recaptcha est une solution largement utilisée qui peut augmenter efficacement la difficulté des attaques machine. Voici les étapes pour intégrer Google recaptcha dans la page d'inscription:

<script src="https://www.google.com/recaptcha/api.js?render=tonSite Key"></script>
<form method="post" action="register.php">
  <!-- nom d&#39;utilisateur、Mot de passe et autres champs d&#39;inscription -->
  <div class="g-recaptcha" data-sitekey="tonSite Key"></div>
  <button type="submit">registre</button>
</form>
<script>
grecaptcha.ready(function() {
  grecaptcha.execute('tonSite Key', {action: 'register'}).then(function(token) {
    // VolontétokenSoumettre au serveur avec d&#39;autres données d&#39;enregistrement
  });
});
</script>

Côté serveur, nous devons vérifier la réponse de RecaptCha, et ce qui suit est un exemple de code de vérification:

<?php
$secretKey = "tonSecret Key";
$response = $_POST['g-recaptcha-response'];
$remoteIp = $_SERVER['REMOTE_ADDR'];

$url = "https://www.google.com/recaptcha/api/siteverify?secret=" . $secretKey . "&response=" . $response . "&remoteip=" . $remoteIp;
$response_json = file_get_contents($url);
$response_data = json_decode($response_json, true);

if ($response_data['success'] == true) {
  // Vérification a été adoptée,Effectuer une opération d&#39;enregistrement
} else {
  // Échec de la vérification,Afficher le message d&#39;erreur
}
?>

2. 限制注册速度

刷号攻击往往伴随着大量、快速的注册请求。为了减少这种攻击带来的影响,我们可以对注册请求设置频率限制。

例如,可以记录每个IP地址在一定时间范围内的注册次数,并进行限制。以下是限制注册速度的示例代码:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$time_range = 60; // Limiter la plage de temps(Deuxième)
$max_register = 5; // Nombre maximum d&#39;inscriptions

// Obtenez une base de données ou une autre méthode de stockageIPNombre d&#39;inscriptions et d&#39;horodatage liés à l&#39;adresse
// ...

if ($register_count >= $max_register) {
  $remaining_time = $time_range - (time() - $last_register_time);
  die("Trop d&#39;inscriptions,S&#39;il vous plaît, attendez" . $remaining_time . "Deuxième后再尝试。");
}

// Ajout d&#39;enregistrements d&#39;enregistrement à la base de données ou à d&#39;autres méthodes de stockage
// ...
?>

3. Exigences de mot de passe solides

L'un des objectifs de l'attaque de balayage du nombre est d'obtenir un grand nombre de comptes afin de s'engager dans d'autres comportements malveillants. Pour empêcher les attaquants d'utiliser des mots de passe simples, nous pouvons forcer les utilisateurs à définir des mots de passe plus complexes.

Par exemple, un mot de passe peut être nécessaire pour contenir au moins 8 caractères et doit contenir des majuscules, des minuscules, des chiffres et des caractères spéciaux. Voici un exemple de code pour les exigences de mot de passe solides:

<?php
$password = $_POST['password'];

if (strlen($password) < 8 || !preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@#$%!^&*()-_=+{}~|/<> ?]). * $ / &#39;, $ mot de passe)) {
  Die ("Le mot de passe est trop faible, veuillez sélectionner un mot de passe plus fort.");
}

// Enregistrez un utilisateur et enregistrez le mot de passe dans la base de données ou d&#39;autres méthodes de stockage // ...
?>

En résumé, la prise de mesures telles que la vérification anti-interaction humaine, la restriction de la fréquence d'enregistrement et le forçage de mots de passe solides peuvent améliorer considérablement la sécurité de la fonction d'enregistrement et empêcher les charges inutiles sur le serveur en faisant glisser l'attaque du nombre.