Skip to content

Commit 592d271

Browse files
authored
fix(audit): timeouts for metrics server to avoid DoS attacks (#1277)
1 parent 568f79d commit 592d271

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

metrics/metrics.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"net/http"
7+
"time"
78

89
"github.com/Layr-Labs/eigensdk-go/logging"
910
"github.com/prometheus/client_golang/prometheus"
@@ -48,12 +49,23 @@ func NewMetrics(ipPortAddress string, reg prometheus.Registerer, logger logging.
4849
func (m *Metrics) Start(ctx context.Context, reg prometheus.Gatherer) <-chan error {
4950
m.logger.Infof("Starting metrics server at port %v", m.ipPortAddress)
5051
errC := make(chan error, 1)
52+
53+
server := http.Server{
54+
Addr: m.ipPortAddress,
55+
Handler: http.NewServeMux(),
56+
ReadTimeout: 10 * time.Second,
57+
WriteTimeout: 10 * time.Second,
58+
IdleTimeout: 120 * time.Second,
59+
MaxHeaderBytes: 1 << 20, // This is 1MB
60+
}
61+
62+
server.Handler.(*http.ServeMux).Handle("/metrics", promhttp.HandlerFor(
63+
reg,
64+
promhttp.HandlerOpts{},
65+
))
66+
5167
go func() {
52-
http.Handle("/metrics", promhttp.HandlerFor(
53-
reg,
54-
promhttp.HandlerOpts{},
55-
))
56-
err := http.ListenAndServe(m.ipPortAddress, nil)
68+
err := server.ListenAndServe()
5769
if err != nil {
5870
errC <- errors.New("prometheus server failed")
5971
} else {

0 commit comments

Comments
 (0)