Pourquoi utiliser un code de vérification graphique
Afin d'empêcher les attaquants d'écrire des programmes pour soumettre des formulaires à plusieurs reprises et causer des problèmes aux autres utilisateurs et aux opérations du site Web, il est généralement nécessaire d'utiliser la vérification graphique avant de soumettre le formulaire. Le code est vérifié pour confirmer que l'opération de soumission est une opération humaine et non une opération par lots de machine.
Analyse des principes
Lors de la génération de codes de vérification graphiques, deux technologies sont principalement utilisées :
1. Générer des nombres aléatoires ou. lettres
2. Convertissez les nombres aléatoires ou les lettres aléatoires générés au format d'image, ajoutez du bruit à l'image et affichez-la.
Méthode de génération :
1. Code de contrôle frontal
<asp:TextBox ID="txtValidateNum" runat="server" Width="98px"></asp:TextBox> <asp:Image ID="Image1" runat="server" Height="22px" Width="58px" ImageUrl="~ValidateNum.aspx"/>请输入图片中验证码!
2. Étapes de traitement de la page ValidateNum.aspx
( 1) Générez aléatoirement une chaîne aléatoire de longueur N. La valeur de N peut être définie par le développeur. La chaîne contient des chiffres, des lettres, etc.
(2) Créez une chaîne générée aléatoirement dans une image et affichez-la.
(3) Enregistrez le code de vérification
Créez d'abord une méthode CreateRandomNum(int n) dans le fichier ValidateNum .aspx.cs pour générer aléatoirement une chaîne aléatoire de longueur n. Afin d'éviter de générer des nombres aléatoires répétés, les résultats des nombres aléatoires seront enregistrés via des variables. Si la même valeur apparaît dans le dernier nombre aléatoire, la méthode elle-même sera appelée pour garantir que différents nombres aléatoires sont générés. Le code est le suivant :
//生成随机字符串 private string CreateRandomNum (int n) { string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; string[] allCharArray = allChar.Split(',');//拆分成数组 string randomNum = ""; int temp = 1; Random rand = new Random(); for(int i = 0;i < n;i++) { if(temp != -1) { rand = new Random(i * temp *((int)DateTime.Now.Ticks)); } int t = rand.Next(35); if(temp == t) { return CreateRandomNum(n); } temp = t; randomNum += allCharArray[i]; } return randomNum; }
Créez ensuite la méthode CreateImage(string validateNum) basée sur la chaîne aléatoire générée pour générer davantage un code graphique Afin de garantir davantage la sécurité, ajoutez quelques couleurs d'interférence à la vérification graphique. code, tel que des motifs d'arrière-plan aléatoires, un traitement de texte, etc. Le code est le suivant :
//生成图片 private void CreateImage(string validateNum) { if(validateNum == null || validateNum.Trim() == String.Empty) return; //生成Bitmap图像 System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length * 12 + 10,22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for(int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2); } Font font = new System.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true); g.DrawString(validateNum,font,brush,2,2); //画图片的前景噪音点 for(int i = 0;i<100;i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x,y,Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width - 1,image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); //将图像保存到指定的流 image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } }
Enfin, dans l'événement de chargement de page Page_Load, créez et affichez l'image de la chaîne de code de vérification, et enregistrez la chaîne de vérification dans la session.
protected void Page_Load(object sender,EventArgs e) { if(!IsPostBack) { string validateNum = CreateRandomNum(4);//生成4位随机字符串 CreateImage(validateNum);//将随机字符串绘制成图片 Session["ValidateNum"] = validateNum; //将随机字符串保存在Session中 } }
À ce stade, un simple algorithme de génération de code de vérification d'image a été écrit. Bien sûr, vous pouvez ajouter des paramètres de sécurité plus riches sur cette base, tels que l'heure d'expiration de la session, etc.
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!