Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Keselamatan aplikasi web Golang: patutkah anda menyemak sama ada input adalah sah utf-8?

Keselamatan aplikasi web Golang: patutkah anda menyemak sama ada input adalah sah utf-8?

WBOY
WBOYke hadapan
2024-02-10 08:10:08638semak imbas

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

editor php Xiaoxin akan memperkenalkan anda kepada aspek penting dalam keselamatan aplikasi web Golang dalam artikel ini: menyemak sama ada input adalah sah utf-8. Pengesahan input adalah penting dalam pembangunan aplikasi web kerana pengguna berniat jahat mungkin menyerahkan input yang mengandungi kod jahat atau aksara haram. Terutama untuk bahasa pengaturcaraan seperti Golang, pengendalian dan pengesahan pengekodan input UTF-8 dengan betul adalah bahagian penting dalam memastikan keselamatan aplikasi. Dalam artikel ini, kami akan melihat cara menyemak dengan cekap sama ada input anda adalah UTF-8 yang sah, dan memberikan beberapa nasihat dan petua praktikal.

Kandungan soalan

Menurut beberapa dokumen amalan terbaik, sebaiknya semak sama ada data input adalah utf-8.

Dalam projek saya, saya menggunakan gin dan menggunakan go-playground/validator untuk pengesahan. Terdapat pengesah "ascii" tetapi tiada pengesah "utf-8".

Saya menemui https://pkg.go.dev/unicode/utf8#validstring dan saya tertanya-tanya sama ada menggunakannya untuk menyemak input akan membantu atau adakah ia diberikan kerana go sendiri menggunakan unicode secara dalaman?

Berikut adalah contoh:

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

Adakah terdapat faedah untuk memastikan newuser中的名称是utf-8编码的?使用utf8.validstring检查name selepas menghubungi c.shouldbindjson?

Penyelesaian

Gin menggunakan pakej pengekodan/json standard untuk menyahmarshal dokumen JSON. Penerangan dokumentasi pakej ini:

UTF-8 yang tidak sah atau pasangan pengganti UTF-16 yang tidak sah tidak dianggap sebagai ralat apabila membuka rentetan petikan. Sebaliknya, ia digantikan dengan aksara gantian Unicode U+FFFD.

Pastikan nilai rentetan yang dinyahkodkan adalah sah UTF-8. Tiada kelebihan menggunakan utf8.ValidString untuk menyemak nilai rentetan.

Bergantung pada keperluan aplikasi, anda mungkin perlu menyemak dan mengendalikan aksara gantian Unikod "�". Selain: Seperti yang ditunjukkan oleh � dalam jawapan ini, SO memperlakukan aksara gantian Unicode seperti mana-mana aksara lain.

Go sendiri menggunakan Unicode secara dalaman? ​​p>

Sesetengah ciri bahasa menggunakan pengekodan UTF-8 (julat rentetan, []rune dan penukaran antara rentetan), tetapi ciri ini tidak mengehadkan bait yang boleh disimpan dalam rentetan. Rentetan boleh mengandungi sebarang jujukan bait, termasuk UTF-8 yang tidak sah.

Atas ialah kandungan terperinci Keselamatan aplikasi web Golang: patutkah anda menyemak sama ada input adalah sah utf-8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam