在 Golang 中实施 XSS 保护

  • 本文关键字:XSS 保护 Golang go xss
  • 更新时间 :
  • 英文 :


我正在使用Golang来构造API Rest。我有一个包含很多字段(超过 100 个(的结构,所以我使用工作得很好gorilla/schema将来自客户端的值分配给结构。

现在,我想避免用户在任何字符串字段中插入Javascript代码,在我定义的bool,字符串,byte[]和int值的结构中。所以,现在我想知道验证这一点的最佳方法是什么。

我正在考虑仅在字符串字段中对结构进行交互,并制作类似的东西:

Loop over the struct {
     myProperty := JSEscapeString(myProperty)
}
可以吗?

在这种情况下,我怎样才能遍历结构体,而只能循环字符串字段?

您可以使用反射来循环访问字段并转义字符串字段。例如:

myStruct := struct {
        IntField int
        StringField string
    } {
        IntField: 42,
        StringField: "<script>alert('foo');</script>",
    }
    value := reflect.ValueOf(&myStruct).Elem()
    // loop over the struct
    for i := 0; i < value.NumField(); i++ {
        field := value.Field(i)
        // check if the field is a string
        if field.Type() != reflect.TypeOf("") {
            continue
        }
        str := field.Interface().(string)
        // set field to escaped version of the string
        field.SetString(html.EscapeString(str))
    }
    fmt.Printf("%#v", myStruct)
    // prints: struct { IntField int; StringField string }{IntField:42, StringField:"&lt;script&gt;alert(&#39;foo&#39;);&lt;/script&gt;"}

请注意,html 包中有一个EscapeString函数。无需实现自己的。

最新更新