Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Webanwendungssicherheit: Sollten Sie prüfen, ob die Eingabe gültiges UTF-8 ist?

Golang-Webanwendungssicherheit: Sollten Sie prüfen, ob die Eingabe gültiges UTF-8 ist?

WBOY
WBOYnach vorne
2024-02-10 08:10:08635Durchsuche

Golang Web 应用程序安全:您应该检查输入是否有效 utf-8?

php-Editor Xiaoxin stellt Ihnen in diesem Artikel einen wichtigen Aspekt der Sicherheit von Golang-Webanwendungen vor: Überprüfen, ob die Eingabe gültig ist, utf-8. Die Eingabevalidierung ist bei der Entwicklung von Webanwendungen von entscheidender Bedeutung, da böswillige Benutzer möglicherweise Eingaben einreichen, die bösartigen Code oder illegale Zeichen enthalten. Insbesondere für Programmiersprachen wie Golang ist die korrekte Handhabung und Validierung der UTF-8-Kodierung von Eingaben ein wichtiger Bestandteil zur Gewährleistung der Anwendungssicherheit. In diesem Artikel schauen wir uns an, wie Sie effizient überprüfen können, ob Ihre Eingabe gültiges UTF-8 ist, und geben einige praktische Ratschläge und Tipps.

Frageninhalt

Laut mehreren Best-Practice-Dokumenten ist es am besten zu prüfen, ob die Eingabedaten UTF-8 sind.

In meinem Projekt verwende ich Gin und verwende Go-Playground/Validator zur Validierung. Es gibt einen „ASCII“-Validator, aber keinen „UTF-8“-Validator.

Ich habe https://pkg.go.dev/unicode/utf8#validstring gefunden und mich gefragt, ob es hilfreich wäre, es zur Überprüfung der Eingabe zu verwenden, oder ob es gegeben ist, weil go selbst intern Unicode verwendet?

Hier ist ein Beispiel:

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

type User struct {
    Name string `json:"name" binding:"required,alphanum"`
}

func main() {
    r := gin.Default()
    r.POST("/user", createUserHandler)
    r.Run()
}

func createUserHandler(c *gin.Context) {
    var newUser User
    err := c.ShouldBindJSON(&newUser)

    if err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }

    c.Status(http.StatusCreated)
}

Gibt es einen Vorteil, newuser中的名称是utf-8编码的?使用utf8.validstring检查name nach dem Anruf bei c.shouldbindjson sicherzustellen?

Workaround

Gin verwendet das Standardpaket encoding/json, um JSON-Dokumente zu entpacken. Dokumentationsbeschreibung dieses Pakets:

Ungültige UTF-8- oder ungültige UTF-16-Ersatzpaare werden beim Unmarshalling von Zeichenfolgen in Anführungszeichen nicht als Fehler behandelt. Stattdessen werden sie durch das Unicode-Ersatzzeichen U+FFFD ersetzt.

Stellen Sie sicher, dass der dekodierte Zeichenfolgenwert gültiges UTF-8 ist. Die Verwendung von utf8.ValidString zum Überprüfen eines Zeichenfolgewerts bietet keinen Vorteil.

Abhängig von den Anwendungsanforderungen müssen Sie möglicherweise das Unicode-Ersatzzeichen „�“ überprüfen und verarbeiten. Nebenbei: Wie durch � in dieser Antwort angegeben, behandelt SO Unicode-Ersatzzeichen wie jedes andere Zeichen.

Go selbst verwendet intern Unicode? ​​p>

Einige Sprachfunktionen verwenden UTF-8-Codierung (Stringbereiche, []Runen und Konvertierungen zwischen Strings), aber diese Features begrenzen nicht die Bytes, die in einem String gespeichert werden können. Zeichenfolgen können jede beliebige Bytesequenz enthalten, einschließlich ungültigem UTF-8.

Das obige ist der detaillierte Inhalt vonGolang-Webanwendungssicherheit: Sollten Sie prüfen, ob die Eingabe gültiges UTF-8 ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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