Golang struct unmarshal xss

时间:2019-08-30 21:14:39

标签: json go golang-migrate

我有一个注入了XSS的结构。为了将其删除,我将其json.marshal,然后运行json.HTMLEscape。然后我将json解组为新的结构。

问题是新结构仍然注入了XSS。

我简直不知道如何从结构中删除XSS。我可以在该字段上编写一个函数来执行此操作,但考虑到存在json.HTMLEscape,我们可以将其反编组,它应该可以正常工作,但不能正常工作。

type Person struct {
    Name string `json:"name"`
}
func main() {
    var p, p2 Person
     // p.Name has XSS
    p.Name = "<script>alert(1)</script>"
    var tBytes bytes.Buffer

    // I marshal it so I can use json.HTMLEscape
    marshalledJson, _ := json.Marshal(p)
    json.HTMLEscape(&tBytes, marshalledJson)

    // here I insert it into a new struct, sadly the p2 struct has the XSS still 
    err := json.Unmarshal(tBytes.Bytes(), &p2)
    if err != nil {
        fmt.Printf(err.Error())
    }
    fmt.Print(p2)

} 

预期的结果是p2。要清理的名称,例如&lt;script&gt;alert(1)&lt;/script&gt;

1 个答案:

答案 0 :(得分:0)

首先,json.HTMLEscape不能满足您的要求:

  

HTMLEscape在字符串文字内将<,>,&,U + 2028和U + 2029字符附加到dst JSON编码的src,这些字符已更改为\ u003c,\ u003e,\ u0026,\ u2028,\ u2029,以便JSON将可以安全地嵌入HTML