Module de connexion utilisateur de développement PHP pour créer un code de vérification simple

La fonction du code de vérification :

Empêcher efficacement un pirate informatique d'utiliser un programme spécifique pour forcer brutalement un utilisateur enregistré spécifique à effectuer des tentatives de connexion continues. En fait, les codes de vérification modernes empêchent généralement les machines de s'enregistrer par lots et de publier des réponses par lots. À l'heure actuelle, de nombreux sites Web utilisent la technologie des codes de vérification pour empêcher les utilisateurs d'utiliser des robots pour s'inscrire, se connecter automatiquement et envoyer du spam.


Le soi-disant code de vérification consiste à générer une image à partir d'une série de nombres ou de symboles générés aléatoirement, et à ajouter des pixels interférents à l'image (pour empêcher l'OCR), l'utilisateur reconnaît visuellement les informations du code de vérification, saisit le formulaire et le soumet pour vérification sur le site Web. Ce n'est qu'après une vérification réussie qu'une certaine fonction peut être utilisée.


Notre code de vérification le plus courant
1, quatre chiffres, une chaîne aléatoire à un chiffre, le code de vérification le plus original, a un effet de vérification presque nul.
2. Code de vérification d'image numérique aléatoire. Les caractères sur l'image sont assez réguliers, certains peuvent avoir un interféron aléatoire ajouté, et certains ont des couleurs de caractères aléatoires, donc l'effet de vérification est meilleur que le précédent. Les personnes sans connaissances de base en graphisme et en imagerie ne peuvent pas le casser !
3. Nombres aléatoires dans différents formats d'image + lettres anglaises majuscules aléatoires + pixels d'interférence aléatoires + positions aléatoires.
4. Les caractères chinois sont le dernier code de vérification pour l'enregistrement. Il est généré de manière aléatoire, ce qui rend la saisie plus difficile et affecte l'expérience utilisateur. Il est donc généralement moins utilisé.

Par souci de simplicité, l'objet principal de notre explication cette fois est le deuxième type. Regardons d'abord plusieurs images de ce type de code de vérification qui sont plus courantes sur Internet
Ces quatre. les styles peuvent essentiellement représenter les types de codes de vérification mentionnés en 2, au départ, il semble que la première image soit la plus facile à déchiffrer, la seconde est la deuxième, la troisième est plus difficile et la quatrième est la plus difficile.
Quelle est la situation réelle ? En fait, ces trois types d’images sont également difficiles à déchiffrer.
La première image est la plus simple. Le fond et les chiffres de l'image utilisent la même couleur, les caractères sont réguliers et les personnages sont dans la même position.
La deuxième image ne semble pas facile, mais si vous l'étudiez attentivement, vous découvrirez ses règles. Peu importe la façon dont la couleur de fond et l'interféron changent, les caractères de vérification sont réguliers et de la même couleur, il est donc très facile de l'exclure. l'interféron, tant qu'ils sont tous des pigments sans caractère, excluez-le simplement.
La troisième image semble être plus compliquée. En plus du changement de couleur d'arrière-plan et d'interféron comme mentionné ci-dessus, la couleur des caractères de vérification change également, et les couleurs de chaque caractère sont également différentes. Il semble impossible de percer ce code de vérification. Cet article prendra ce type de code de vérification comme exemple. Dans la quatrième image, les étudiants peuvent le créer eux-mêmes.
La quatrième image, en plus des caractéristiques mentionnées dans la troisième image, ajoute deux lignes droites de taux d'interférence au texte. Cela semble difficile, mais c'est facile à supprimer.

Publiez une image de base qui génère un code de vérification d'image png :

1. Générez une image png
2. Définissez la couleur d'arrière-plan de l'image
3. Définissez la couleur et le style de la police
4. Générez un code de vérification aléatoire à 4 chiffres
5. Ajustez l'angle de rotation et la position de chaque caractère généré et dessinez-le sur l'image png
6. Ajoutez des lignes de bruit et d'interférence pour empêcher la machine d'enregistrement d'analyser l'image originale pour un enregistrement malveillant
7. Sortez l'image
8. Libérez l'image Mémoire occupée

Ce qui suit est un exemple de code de vérification :

<?php
//设置session,必须处于脚本最顶部
  session_start();
  
  $image = imagecreatetruecolor(100, 30);    //1>设置验证码图片大小的函数
  //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);
  $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff
  //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色
  imagefill($image, 0, 0, $bgcolor);
  //10>设置变量
  $captcha_code = "";
  //7>生成随机数字
  for($i=0;$i<4;$i++){
    //设置字体大小
    $fontsize = 6;
    //设置字体颜色,随机颜色
    $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));      //0-120深颜色
    //设置数字
    $fontcontent = rand(0,9);
    //10>.=连续定义变量
    $captcha_code .= $fontcontent;
    //设置坐标
    $x = ($i*100/4)+rand(5,10);
    $y = rand(5,10);
   imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
  }
  //10>存到session
  $_SESSION['authcode'] = $captcha_code;
  //8>增加干扰元素,设置雪花点
  for($i=0;$i<200;$i++){
    //设置点的颜色,50-200颜色比数字浅,不干扰阅读
    $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200));
    //imagesetpixel — 画一个单一像素
    imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
  }
  //9>增加干扰元素,设置横线
  for($i=0;$i<4;$i++){
    //设置线的颜色
    $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220));
    //设置线,两点一线
    imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor);
  }
  //2>设置头部,image/png
  header('Content-Type: image/png');
  //3>imagepng() 建立png图形函数
  imagepng($image);
  //4>imagedestroy() 结束图形函数 销毁$image
  imagedestroy($image);
?>

Le style d'affichage est le suivant :

y3.png

Formation continue
||
<?php //设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //10>设置变量 $captcha_code = ""; //7>生成随机数字 for($i=0;$i<4;$i++){ //设置字体大小 $fontsize = 6; //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //设置数字 $fontcontent = rand(0,9); //10>.=连续定义变量 $captcha_code .= $fontcontent; //设置坐标 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //10>存到session $_SESSION['authcode'] = $captcha_code; //8>增加干扰元素,设置雪花点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //9>增加干扰元素,设置横线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image); ?>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel