Скажем, у нас есть тип для инкапсуляции конфиденциальной информации, доступ к которому можно получить только путем вызова метода SecretValue
:
type Secret struct {
secret string
}
func (s *Secret) SecretValue() string {
return s.secret
}
Мы хотим предотвратить утечку конфиденциальной информации secret
в журналы.В частности, мы хотим убедиться, что string
, возвращаемый SecretValue()
, никогда не будет передан в качестве аргумента любому методу, который может записать в stdout, stderr или файл, то есть таким методам, как fmt.Printf
, * 1009.*, fmt.Errorf
и т. Д.
Возможно ли с помощью статического анализа кода или с помощью отражения во время выполнения реализовать такую политику?Если да, то как на высоком уровне это будет достигнуто?
Можно ли даже перечислить "все методы в стандартной библиотеке, которые могут писать в stdout, stderr,или файл "?Если да, то как?