Maison >développement back-end >Golang >Sécurité de l'application Web Golang : devez-vous vérifier si l'entrée est valide en utf-8 ?

Sécurité de l'application Web Golang : devez-vous vérifier si l'entrée est valide en utf-8 ?

WBOY
WBOYavant
2024-02-10 08:10:08682parcourir

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

l'éditeur php Xiaoxin vous présentera un aspect important de la sécurité des applications Web Golang dans cet article : vérifier si l'entrée est valide en utf-8. La validation des entrées est essentielle dans le développement d'applications Web, car des utilisateurs malveillants peuvent soumettre des entrées contenant du code malveillant ou des caractères illégaux. Surtout pour les langages de programmation comme Golang, la gestion et la validation correctes du codage UTF-8 des entrées sont un élément important pour garantir la sécurité des applications. Dans cet article, nous verrons comment vérifier efficacement si votre entrée est UTF-8 valide et fournirons quelques conseils et astuces pratiques.

Contenu de la question

Selon plusieurs documents de bonnes pratiques, il est préférable de vérifier si les données d'entrée sont en utf-8.

Dans mon projet, j'utilise gin et j'utilise go-playground/validator pour la validation. Il existe un validateur "ascii" mais pas de validateur "utf-8".

J'ai trouvé https://pkg.go.dev/unicode/utf8#validstring et je me demandais si l'utiliser pour vérifier l'entrée serait utile ou est-ce donné parce que go lui-même utilise Unicode en interne ?

Voici un exemple :

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)
}

Y a-t-il un avantage à s'assurer newuser中的名称是utf-8编码的?使用utf8.validstring检查name après avoir appelé c.shouldbindjson ?

Workaround

Gin utilise le package standard encoding/json pour désorganiser les documents JSON. Description documentaire de ce package :

Les paires de substitution UTF-8 ou UTF-16 non valides ne sont pas traitées comme des erreurs lors de la suppression des chaînes entre guillemets. Au lieu de cela, ils sont remplacés par le caractère de remplacement Unicode U+FFFD.

Assurez-vous que la valeur de la chaîne décodée est UTF-8 valide. Il n'y a aucun avantage à utiliser utf8.ValidString pour vérifier une valeur de chaîne.

En fonction des exigences de l'application, vous devrez peut-être vérifier et gérer le caractère de remplacement Unicode "�". À part : comme indiqué par � dans cette réponse, SO traite les caractères de remplacement Unicode comme n'importe quel autre caractère.

Go lui-même utilise Unicode en interne ? ​​p>

Certaines fonctionnalités du langage utilisent le codage UTF-8 (plages de chaînes, []runes et conversions entre chaînes), mais ces fonctionnalités ne limitent pas le nombre d'octets pouvant être stockés dans une chaîne. Les chaînes peuvent contenir n’importe quelle séquence d’octets, y compris du UTF-8 non valide.

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