Skip to content

Commit 83c73f2

Browse files
committed
Filter sensitive data by default
Signed-off-by: Jason Parraga <[email protected]>
1 parent 28ab5c9 commit 83c73f2

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

extra/redisotel/config.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package redisotel
22

33
import (
4+
"strings"
5+
46
"github.com/redis/go-redis/v9"
57
"go.opentelemetry.io/otel"
68
"go.opentelemetry.io/otel/attribute"
@@ -63,6 +65,7 @@ func newConfig(opts ...baseOption) *config {
6365
mp: otel.GetMeterProvider(),
6466
dbStmtEnabled: true,
6567
callerEnabled: true,
68+
filter: defaultCommandFilter,
6669
}
6770

6871
for _, opt := range opts {
@@ -134,6 +137,29 @@ func WithCommandFilter(filter func(cmd redis.Cmder) bool) TracingOption {
134137
})
135138
}
136139

140+
func defaultCommandFilter(cmd redis.Cmder) bool {
141+
if strings.ToLower(cmd.Name()) == "auth" {
142+
return true
143+
}
144+
145+
if strings.ToLower(cmd.Name()) == "hello" {
146+
if len(cmd.Args()) < 3 {
147+
return false
148+
}
149+
150+
arg, exists := cmd.Args()[2].(string)
151+
if !exists {
152+
return false
153+
}
154+
155+
if strings.ToLower(arg) == "auth" {
156+
return true
157+
}
158+
}
159+
160+
return false
161+
}
162+
137163
//------------------------------------------------------------------------------
138164

139165
type MetricsOption interface {

extra/redisotel/tracing_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,78 @@ func TestWithCommandFilter(t *testing.T) {
150150
t.Fatal(err)
151151
}
152152
})
153+
154+
t.Run("auth command filtered by default", func(t *testing.T) {
155+
provider := sdktrace.NewTracerProvider()
156+
hook := newTracingHook(
157+
"",
158+
WithTracerProvider(provider),
159+
)
160+
ctx, span := provider.Tracer("redis-test").Start(context.TODO(), "redis-test")
161+
cmd := redis.NewCmd(ctx, "auth", "test-password")
162+
defer span.End()
163+
164+
processHook := hook.ProcessHook(func(ctx context.Context, cmd redis.Cmder) error {
165+
innerSpan := trace.SpanFromContext(ctx).(sdktrace.ReadOnlySpan)
166+
if innerSpan.Name() != "redis-test" || innerSpan.Name() == "auth" {
167+
t.Fatalf("auth command should not be traced by default")
168+
}
169+
170+
return nil
171+
})
172+
err := processHook(ctx, cmd)
173+
if err != nil {
174+
t.Fatal(err)
175+
}
176+
})
177+
178+
t.Run("hello command filtered by default when sensitive", func(t *testing.T) {
179+
provider := sdktrace.NewTracerProvider()
180+
hook := newTracingHook(
181+
"",
182+
WithTracerProvider(provider),
183+
)
184+
ctx, span := provider.Tracer("redis-test").Start(context.TODO(), "redis-test")
185+
cmd := redis.NewCmd(ctx, "hello", 3, "AUTH", "test-user", "test-password")
186+
defer span.End()
187+
188+
processHook := hook.ProcessHook(func(ctx context.Context, cmd redis.Cmder) error {
189+
innerSpan := trace.SpanFromContext(ctx).(sdktrace.ReadOnlySpan)
190+
if innerSpan.Name() != "redis-test" || innerSpan.Name() == "hello" {
191+
t.Fatalf("auth command should not be traced by default")
192+
}
193+
194+
return nil
195+
})
196+
err := processHook(ctx, cmd)
197+
if err != nil {
198+
t.Fatal(err)
199+
}
200+
})
201+
202+
t.Run("hello command not filtered by default when not sensitive", func(t *testing.T) {
203+
provider := sdktrace.NewTracerProvider()
204+
hook := newTracingHook(
205+
"",
206+
WithTracerProvider(provider),
207+
)
208+
ctx, span := provider.Tracer("redis-test").Start(context.TODO(), "redis-test")
209+
cmd := redis.NewCmd(ctx, "hello", 3)
210+
defer span.End()
211+
212+
processHook := hook.ProcessHook(func(ctx context.Context, cmd redis.Cmder) error {
213+
innerSpan := trace.SpanFromContext(ctx).(sdktrace.ReadOnlySpan)
214+
if innerSpan.Name() != "hello" {
215+
t.Fatalf("hello command should be traced")
216+
}
217+
218+
return nil
219+
})
220+
err := processHook(ctx, cmd)
221+
if err != nil {
222+
t.Fatal(err)
223+
}
224+
})
153225
}
154226

155227
func TestTracingHook_DialHook(t *testing.T) {

0 commit comments

Comments
 (0)