屏蔽敏感的 url 查询参数



假设我有这个网址

https://example.com:8080?private-token=foo&authenticity_token=bar

我有一个函数来确定是否屏蔽参数。

如何屏蔽 url,但保持参数的顺序。

目前我有

u, err := url.Parse(originalURL)
if err != nil {
panic(err)
}
m, _ := url.ParseQuery(u.RawQuery)
for key := range m {
if toMask(key) {
m.Set(key, "FILTERED")
}
}
u.RawQuery = m.Encode()
return u.String()

但这会返回带有参数切换的 url。

https://example.com:8080?authenticity_token=FILTERED&private-token=FILTERED

首先,参数的顺序不应该有任何重要意义。

但是我可以看到此规则不适用的某些情况(例如,当您对 URL 进行哈希处理时(。在这种情况下,您应该在使用 URL 之前对其进行规范化。

最后回答您的问题,如果使用查询,则无法保持顺序,因为值是映射,并且映射不会为排序而烦恼。因此,您应该使用u.RawQuery来处理查询。

u, err := url.Parse(originalURL)
if err != nil {
panic(err)
}
newQuery := ""
for i, queryPart := range strings.Split(u.RawQuery, ";") {
// you now have a slice of string ["private-token=foo", "authenticity_token=bar"]
splitParam :=  strings.Split(queryPart, "=")
if toMask(splitParam[0]) {
splitParam[1] = "FILTERED"
}
if i != 0 {
newQuery = newQuery + ";"
}
newQuery = splitParam[0] + "=" + splitParam[1]
}
u.RawQuery = newQuery
return u.String()

此代码只是示例。您必须更好地检查特殊情况或错误。如果需要,您也可以使用正则表达式。

最新更新