Heim >Backend-Entwicklung >Golang >Golang-Webanwendungssicherheit: Sollten Sie prüfen, ob die Eingabe gültiges UTF-8 ist?
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.
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?
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!