Go 在戈朗实施XSS保护

Go 在戈朗实施XSS保护,go,xss,Go,Xss,我正在使用Golang构建一个API Rest。我有一个包含很多字段(超过100个)的结构,因此我使用gorilla/schema将来自客户端的值分配给该结构,这非常好 现在,我想避免用户在我定义的bool、strings、byte[]和int值的结构中的任何字符串字段中插入Javascript代码。所以,现在我想知道什么是最好的方式来验证这一点 我只在字符串字段中对结构进行交互,并制作如下内容: Loop over the struct { myProperty := JSEscap

我正在使用Golang构建一个API Rest。我有一个包含很多字段(超过100个)的结构,因此我使用
gorilla/schema
将来自客户端的值分配给该结构,这非常好

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

我只在字符串字段中对结构进行交互,并制作如下内容:

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;"}
myStruct:=struct{
IntField int
字符串字段字符串
} {
IntField:42,
StringField:“警报('foo');”,
}
value:=reflect.ValueOf(&myStruct).Elem()
//在结构上循环
对于i:=0;i

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

防止xss的最佳方法是在将值添加到html或javascript时使用正确的转义函数转义该值。输入过程中的转义字符串在输出到其他位置(如android)时会得到错误的结果。是否可以将其设为可以接受任何结构并对其进行清理的函数?围棋中缺少泛型让我很困惑。。。