我正在使用 Golang 构建 API Rest。我有一个包含很多字段(超过 100 个)的结构,因此我使用以下命令将来自客户端的值分配给该结构gorilla/schema
效果很好。
现在,我想避免用户在任何字符串字段中插入 Javascript 代码,在我定义了 bool、strings、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:"<script>alert('foo');</script>"}
请注意,有一个EscapeString https://golang.org/pkg/html/#EscapeStringhtml 包中的函数。不需要自己实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)