Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie ein Beispiel für einen Golang-HTTP-Bestätigungscode

Teilen Sie ein Beispiel für einen Golang-HTTP-Bestätigungscode

藏色散人
藏色散人nach vorne
2021-02-25 16:20:082554Durchsuche

Das Folgende ist ein Beispiel für einen Golang-HTTP-Bestätigungscode, der von der golang-Tutorial-Kolumne geteilt wird. Ich hoffe, dass es Freunden in Not hilfreich sein wird! Beispiel für einen Golang-HTTP-Verifizierungscode der Unterscheidung Ein öffentliches, vollautomatisches Programm, bei dem der Benutzer ein Computer oder ein Mensch ist. Es kann Folgendes verhindern: böswilliges Knacken von Passwörtern, Ticketbetrug, Forenflutung und verhindert effektiv, dass ein Hacker ein bestimmtes Programm nutzt, um einen bestimmten registrierten Benutzer brutal zu zwingen, sich kontinuierlich anzumelden. Tatsächlich ist die Verwendung von Bestätigungscodes eine gängige Methode für viele Websites Jetzt verwenden wir diese Funktion auf relativ einfache Weise. Diese Frage kann von einem Computer generiert und beurteilt werden, aber nur ein Mensch kann sie beantworten. Da Computer keine CAPTCHA-Fragen beantworten können, kann der Benutzer, der die Fragen beantwortet, als Mensch betrachtet werden.

Der Client fordert den Server auf, das Bild des Bestätigungscodes zu erhalten.

Der Server generiert eine zufällige Zeichenfolge (Bestätigungscodewert) und schreibt sie in die Sitzung und schreibt den Bestätigungscodewert in das Bild ein und gibt es an den Client zurück. Die vom Client eingegebene Zeichenfolge für das Bild wird zur Überprüfung an den Server übermittelt. Der Server vergleicht den vom Client übermittelten Zeichenfolgenwert und die Sitzung. Wenn er übereinstimmt, übergibt er den Verifizierung

  • Da der vom Server generierte Verifizierungscodewert von Anfang bis Ende ist, wird der Verifizierungscode nicht an den Client zurückgegeben. Daher kann der Client die Verifizierungscodezeichenfolge nur anhand des Bildes identifizieren, wodurch der Mensch sichergestellt wird -Maschinenverifizierungslogik.
  • Der HTTP-Bestätigungscode von Go
  • Gedanken
Der Go-Sprach-HTTP-Server unterstützt Session standardmäßig nicht, daher muss der Bestätigungscodewert auf andere Weise gespeichert werden. Das Folgende ist die Logik, Session nicht zu verwenden

Der Client fordert den Server auf, die Bestätigungscode-ID zu erhalten

Der Server generiert die Bestätigungscode-ID und den Bestätigungscodewert, zeichnet die Zuordnungsbeziehung zwischen der ID und dem Wert im Speicher oder Cache auf und gibt die ID an den Client zurück Der Client fordert den Server auf, das Bestätigungscode-Bild basierend auf der zurückgegebenen ID zu erhalten.

Der Server erhält die Bestätigungscode-ID, ruft den Bestätigungscodewert aus dem Speicher oder Cache ab, schreibt den Wert in das Bild und gibt das Bild an den Client zurück

Der Client übermittelt die Bestätigungscode-ID (erhalten in Schritt 1) ​​und den Bestätigungscodewert an die Serververifizierung.

    Der Server erhält die Bestätigungscode-ID, ruft den Bestätigungscodewert aus dem Speicher oder Cache ab und vergleicht ihn mit dem Bestätigungscode Vom Kunden übermittelter Wert
  • Beispiel
  • Installation der Bestätigungscode-Abhängigkeit
github.com/dchest/captcha
  • Code-Implementierung
  • 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))
       }

    Ausführen
    1. Besuchen Sie /captcha/generate, um die Bestätigungscode-ID zu erhalten
      Besuchen Sie /captcha /image?id=Verifizierungscode-ID
    1. Besuchen Sie /login und geben Sie im ersten Schritt die Bestätigungscode-ID und im zweiten Schritt den Verifizierungscodewert ein, um die Verifizierungsergebnisse anzuzeigen
    1. Projektadresse
      1. https:/ /github.com/xileistudio/go-http-captcha-example
  • Das obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel für einen Golang-HTTP-Bestätigungscode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen