代码之家  ›  专栏  ›  技术社区  ›  lulalala

掩码敏感url查询参数

  •  0
  • lulalala  · 技术社区  · 7 年前

    假设我有这个网址

    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
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   François Bastien    7 年前

    但我可以看到一些情况下,这个规则不适用(例如当你散列一个网址)。在这种情况下,您应该在使用URL之前对其进行规范化。

    最后,为了回答您的问题,如果使用Query,您将无法保持顺序,因为值是一个map,map不需要进行排序。因此,您应该使用 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()
    

    这段代码只是一个例子。你必须更好地检查特殊情况或错误。如果需要,也可以使用regexp。

    推荐文章