File tree Expand file tree Collapse file tree 4 files changed +32
-3
lines changed Expand file tree Collapse file tree 4 files changed +32
-3
lines changed Original file line number Diff line number Diff line change 77
88from honeybadger import honeybadger
99from honeybadger .plugins import Plugin , default_plugin_manager
10- from honeybadger .utils import filter_dict , filter_env_vars , get_duration
10+ from honeybadger .utils import (
11+ filter_dict ,
12+ filter_env_vars ,
13+ get_duration ,
14+ sanitize_request_id ,
15+ )
1116from honeybadger .contrib .db import DBHoneybadger
1217
1318try :
@@ -160,6 +165,7 @@ def _set_request_id(self, request):
160165 or getattr (request , "request_id" , None )
161166 or request .headers .get ("X-Request-ID" , None )
162167 )
168+ request_id = sanitize_request_id (request_id )
163169 if not request_id :
164170 request_id = str (uuid .uuid4 ())
165171
Original file line number Diff line number Diff line change 1212 filter_env_vars ,
1313 get_duration ,
1414 extract_honeybadger_config ,
15+ sanitize_request_id ,
1516)
1617from honeybadger .contrib .db import DBHoneybadger
1718from six import iteritems
@@ -202,7 +203,7 @@ def _initialize_honeybadger(self, config):
202203 def _handle_request_started (self , sender , * args , ** kwargs ):
203204 from flask import request
204205
205- request_id = request .headers .get ("X-Request-ID" )
206+ request_id = sanitize_request_id ( request .headers .get ("X-Request-ID" ) )
206207 if not request_id :
207208 request_id = str (uuid .uuid4 ())
208209
Original file line number Diff line number Diff line change 1- from honeybadger .utils import filter_dict , filter_env_vars
1+ from honeybadger .utils import filter_dict , filter_env_vars , sanitize_request_id
22
33
44def test_filter_dict ():
@@ -69,3 +69,14 @@ def test_filter_env_vars_with_non_dict():
6969
7070def test_filter_env_vars_empty_dict ():
7171 assert filter_env_vars ({}) == {}
72+
73+
74+ def test_sanitize_request_id ():
75+ assert sanitize_request_id ("abc123-def456" ) == "abc123-def456"
76+ assert sanitize_request_id ("abc_123@def#456" ) == "abc123def456"
77+ assert sanitize_request_id ("a" * 300 ) == "a" * 255
78+ assert sanitize_request_id (" abc123 " ) == "abc123"
79+ assert sanitize_request_id ("@#$%^&*()" ) is None
80+ assert sanitize_request_id (None ) is None
81+ assert sanitize_request_id ("" ) is None
82+ assert sanitize_request_id (" " ) is None
Original file line number Diff line number Diff line change 11import json
22import time
3+ import re
34
45
56class StringReprJSONEncoder (json .JSONEncoder ):
@@ -87,3 +88,13 @@ def get_duration(start_time):
8788 return None
8889
8990 return round ((time .time () - start_time ) * 1000 , 4 )
91+
92+
93+ def sanitize_request_id (request_id ):
94+ """Sanitize a Request ID by keeping only alphanumeric characters and hyphens."""
95+ if not request_id :
96+ return None
97+
98+ sanitized = re .sub (r"[^a-zA-Z0-9-]" , "" , request_id .strip ())[:255 ]
99+
100+ return sanitized or None
You can’t perform that action at this time.
0 commit comments