Маскировать чувствительные параметры запроса URL - PullRequest
0 голосов
/ 24 октября 2018

Скажите, у меня есть этот 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

1 Ответ

0 голосов
/ 24 октября 2018

Во-первых, порядок параметров не должен иметь никакого значения.

Но я вижу ситуацию, когда это правило не применяется (например, когда вы хэшируете URL).В этом случае вам следует нормализовать URL-адрес перед его использованием.

Наконец, чтобы ответить на ваш вопрос, вы не можете сохранить порядок, если используете Query, так как Values ​​- это карта, а карта не беспокоится о порядке.Таким образом, вы должны работать над запросом, используя 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()

Этот код является просто примером.Вы должны лучше проверить на особые случаи или ошибки.Вы также можете использовать регулярные выражения, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...