Maison  >  Article  >  développement back-end  >  Partager un exemple de code de vérification Golang Http

Partager un exemple de code de vérification Golang Http

藏色散人
藏色散人avant
2021-02-25 16:20:082510parcourir

Ce qui suit est un exemple de code de vérification Golang Http partagé par la colonne du didacticiel golang. J'espère qu'il sera utile aux amis dans le besoin !

Le code de vérification (CAPTCHA) est "Test de Turing public entièrement automatisé pour distinguer les ordinateurs des humains" et Test de Turing humain ), est un programme public entièrement automatisé qui distingue si un utilisateur est un ordinateur ou un humain. Il peut empêcher : le piratage malveillant des mots de passe, la fraude aux tickets, l'inondation des forums et empêche efficacement un pirate informatique d'utiliser un programme spécifique pour forcer brutalement un utilisateur enregistré spécifique à se connecter en permanence. En fait, l'utilisation de codes de vérification est une méthode courante pour de nombreux sites Web. maintenant.Nous utilisons Cette fonction est implémentée de manière relativement simple. Cette question peut être générée et jugée par un ordinateur, mais seul un humain peut y répondre. Puisque les ordinateurs ne peuvent pas répondre aux questions CAPTCHA, l’utilisateur qui répond aux questions peut être considéré comme un humain.

Mécanisme de fonctionnement du code de vérification de site Web traditionnel

  • Le client demande au serveur d'obtenir l'image du code de vérification
  • Le serveur génère une chaîne aléatoire (valeur du code de vérification) Écrivez dans la session et écrivez la valeur du code de vérification dans l'image et renvoyez-la au client
  • Le client saisit la chaîne sur l'image et la soumet au serveur pour vérification
  • Le serveur compare les caractères soumis par le client. Si la valeur de la chaîne correspond à la valeur de la session. Si elle correspond, la vérification est réussie

Puisque la valeur du code de vérification générée par le serveur ne l'est pas. retourné au client du début à la fin, le client ne peut l'identifier qu'à partir de la chaîne de code de vérification pour garantir la logique de vérification homme-machine.

Code de vérification HTTP de Go

Idée

Le serveur HTTP du langage Go ne prend pas en charge la session par défaut, la valeur du code de vérification doit donc être stocké d'une manière différente, comme suit C'est une logique qui n'utilise pas de session

  • Le client demande au serveur d'obtenir le code de vérification ID
  • Le serveur génère le code de vérification ID , génère la valeur du code de vérification et enregistre la relation de mappage entre l'ID et la valeur dans la mémoire ou le cache, et renvoie l'ID au client
  • Le client demande au serveur d'obtenir l'image du code de vérification en fonction de ID renvoyé
  • Le serveur obtient l'ID du code de vérification et récupère le code de vérification de la mémoire ou de la valeur du cache, écrit la valeur dans l'image et renvoie l'image au client
  • Le client soumet la vérification ID de code (obtenu à l'étape 1) et la valeur du code de vérification au serveur pour vérification
  • Le serveur obtient l'ID du code de vérification, récupère la valeur du code de vérification de la mémoire ou du cache et la compare avec la valeur du code de vérification soumise par le client

Exemple

  1. Installer la dépendance du code de vérification
github.com/dchest/captcha
  1. Implémentation du code
package main
   
   import (
       "fmt"
       "github.com/dchest/captcha"
       "log"
       "net/http"
   )
   
   func main() {
       // 获取验证码 ID
       http.HandleFunc("/captcha/generate", func(w http.ResponseWriter, r *http.Request) {
           id := captcha.NewLen(6)
           if _, err := fmt.Fprint(w, id); err != nil {
               log.Println("generate captcha error", err)
           }
       })
       // 获取验证码图片
       http.HandleFunc("/captcha/image", func(w http.ResponseWriter, r *http.Request) {
           id := r.URL.Query().Get("id")
           if id == "" {
               http.Error(w, "Bad Request", http.StatusBadRequest)
               return
           }
           w.Header().Set("Content-Type", "image/png")
           if err := captcha.WriteImage(w, id, 120, 80); err != nil {
               log.Println("show captcha error", err)
           }
       })
       // 业务处理
       http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
           if err := r.ParseForm(); err != nil {
               log.Println("parseForm error", err)
               http.Error(w, "Internal Error", http.StatusInternalServerError)
               return
           }
           // 获取验证码 ID 和验证码值
           id := r.FormValue("id")
           value := r.FormValue("value")
           // 比对提交的验证码值和内存中的验证码值
           if captcha.VerifyString(id, value) {
               fmt.Fprint(w, "ok")
           } else {
               fmt.Fprint(w, "mismatch")
           }
       })
       log.Fatal(http.ListenAndServe(":8080", nil))
   }
  1. Exécuter

    1. Visitez /captcha/generate pour obtenir l'ID du code de vérification
    2. Visitez /captcha/image?id=ID du code de vérification
    3. Visitez /login et entrez l'ID du code de vérification dans la première étape et la valeur du code de vérification dans la deuxième étape pour afficher les résultats de la vérification

Adresse du projet

https://github.com/xialeistudio/go-http-captcha-example

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer