Cas pratiques et solutions pour prévenir les attaques d'enregistrement PHP

王林
Libérer: 2023-08-27 14:52:01
original
682 Les gens l'ont consulté

Cas pratiques et solutions pour prévenir les attaques denregistrement PHP

Cas pratiques et solutions pour prévenir les attaques d'enregistrement PHP

Introduction :

Avec le développement rapide d'Internet, les problèmes de sécurité des réseaux deviennent de plus en plus graves. Parmi elles, les attaques anti-swipe d'enregistrement sont une méthode d'attaque courante. Les attaquants utilisent des scripts automatisés ou des programmes malveillants pour enregistrer un grand nombre de comptes, ce qui consomme considérablement les ressources du serveur et affecte l'utilisation normale du site Web. Cet article présentera un cas pratique basé sur PHP et fournira les solutions de défense correspondantes.

Contexte du cas :

Supposons que nous ayons une fonction d'enregistrement des utilisateurs. Les utilisateurs doivent saisir leur nom d'utilisateur, leur mot de passe, leur adresse e-mail et d'autres informations pour s'inscrire. Après avoir reçu les informations d'enregistrement soumises par l'utilisateur, le système écrira les informations de l'utilisateur dans la base de données via un script PHP.

L'attaquant utilise des programmes ou des scripts automatisés pour envoyer un grand nombre de demandes d'enregistrement au serveur en même temps et enregistrer instantanément un grand nombre de comptes malveillants. Cette méthode d'attaque entraînera l'épuisement des ressources du serveur, les utilisateurs normaux ne pourront pas s'inscrire ou se connecter, ce qui entraînera de graves problèmes sur le site Web.

Solution de défense :

  1. Ajouter une fonction de code de vérification

Le code de vérification est actuellement l'un des moyens les plus couramment utilisés pour empêcher les attaques de robots. En ajoutant une fonction de code de vérification à la page d'enregistrement de l'utilisateur, il peut être demandé aux utilisateurs de saisir le code de vérification dans l'image pour garantir que l'utilisateur est authentique.

Exemple de code :

<!-- 在注册页面的表单中添加验证码输入框 -->
<form action="register.php" method="post">
  <!-- 其他表单字段 -->
  <label for="captcha">验证码:</label>
  <input type="text" name="captcha" id="captcha" required>
  <img src="captcha.php" alt="验证码">
  <!-- 其他表单字段 -->
  <button type="submit">注册</button>
</form>

<!-- 生成验证码的captcha.php文件 -->
<?php
session_start();

// 生成随机验证码
$code = substr(md5(rand()), 0, 4);

// 将验证码存入SESSION中
$_SESSION['captcha'] = $code;

// 创建一个空白图片
$image = imagecreatetruecolor(80, 40);

// 设置颜色
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);

// 填充背景色
imagefill($image, 0, 0, $bgColor);

// 写入验证码
imagestring($image, 5, 20, 10, $code, $textColor);

// 输出图片
header('Content-type: image/jpeg');
imagejpeg($image);

// 销毁图片
imagedestroy($image);
?>
Copier après la connexion

Dans le code ci-dessus, vous devez d'abord ajouter une zone de saisie du code de vérification au formulaire sur la page d'inscription. Les utilisateurs doivent saisir correctement le code de vérification pour terminer l'inscription. Parallèlement, afin de générer une image de code de vérification, un fichier captcha.php doit être créé sur le serveur. Ce fichier génère un code de vérification aléatoire et le stocke dans la SESSION. Ensuite, utilisez la fonction imagecreatetruecolor() de PHP pour créer une image vierge, définir la couleur d'arrière-plan et la couleur du texte, et écrire le code de vérification dans l'image. Enfin, l'image du code de vérification générée est envoyée au navigateur via la fonction d'en-tête. imagecreatetruecolor()函数创建一个空白图片,设置背景色和文字颜色,并将验证码写入图片中。最后,通过header函数将生成的验证码图片输出到浏览器中。

  1. 添加IP和用户限制

通过限制同一IP或同一用户在一定时间内只能注册一次,可以有效减缓注册防刷攻击的影响。

代码示例:

<?php
session_start();

// 获取IP地址
$ip = $_SERVER['REMOTE_ADDR'];

// 获取用户ID或其他唯一标识符
$userId = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : '';

// 设置时间间隔限制(单位:秒)
$timeLimit = 60;

// 检查用户是否已经在规定时间内注册过
if (checkRegistrationLimit($ip, $userId, $timeLimit)) {
  // 用户已经在规定时间内注册过,显示错误信息,禁止注册
  echo '您已经在规定时间内注册过了!';
  exit;
}

// 其他注册逻辑

// 完成注册后记录IP和用户信息
recordRegistrationInfo($ip, $userId);

// 其他后续操作

// 检查用户是否在规定时间内已经注册过
function checkRegistrationLimit($ip, $userId, $timeLimit) {
  // 在数据库或文件中记录用户注册时间
  // 判断是否在指定时间内已经注册过
  // 返回true或false
}

// 记录用户注册信息
function recordRegistrationInfo($ip, $userId) {
  // 在数据库或文件中记录用户IP和用户ID等信息
}
?>
Copier après la connexion

在上述代码中,首先通过$_SERVER['REMOTE_ADDR']获取用户的IP地址,通过$_SESSION['user_id']获取用户的ID或其他唯一标识符。设置一个时间间隔限制,例如60秒。然后,通过checkRegistrationLimit()函数检查用户是否在规定时间内已经注册过。如果是,则显示错误信息,禁止注册;否则,执行其他注册逻辑,并在注册完成后使用recordRegistrationInfo()

    Ajouter des restrictions d'adresse IP et d'utilisateur

    En limitant la même adresse IP ou le même utilisateur à ne s'inscrire qu'une seule fois au cours d'une certaine période de temps, l'impact des attaques anti-brushing d'enregistrement peut être efficacement atténué .

    🎜Exemple de code : 🎜rrreee🎜Dans le code ci-dessus, obtenez d'abord l'adresse IP de l'utilisateur via $_SERVER['REMOTE_ADDR'], et transmettez $_SESSION['user_id'] Obtenez l'identifiant de l'utilisateur ou un autre identifiant unique. Définissez une limite d'intervalle de temps, par exemple 60 secondes. Ensuite, utilisez la fonction checkRegistrationLimit() pour vérifier si l'utilisateur s'est inscrit dans le délai spécifié. Si tel est le cas, un message d'erreur s'affiche et l'enregistrement est interdit ; sinon, une autre logique d'enregistrement est exécutée et une fois l'enregistrement terminé, la fonction recordRegistrationInfo() est utilisée pour enregistrer l'adresse IP, l'ID utilisateur et d'autres informations. 🎜🎜Conclusion : 🎜🎜En ajoutant des fonctions de code de vérification, des restrictions IP et utilisateur, etc., les attaques anti-brushing d'enregistrement PHP peuvent être efficacement empêchées. En cours de développement, des ajustements correspondants peuvent être effectués en fonction de circonstances spécifiques et d'autres mesures de sécurité peuvent être ajoutées pour améliorer la sécurité du site Web. 🎜

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!