Python日志敏感数据屏蔽脚本优化:解决误屏蔽与未覆盖问题
解决方案:屏蔽日志中
=右侧的敏感值 核心思路
针对日志里的键=值格式内容,直接屏蔽=右侧的所有值,同时单独排除时间戳类字段(避免误屏蔽),覆盖所有自定义含密变量、DB连接串、密码等场景。
实现代码与正则说明
import re def mask_sensitive_logs(log_content): # 匹配并保留时间戳字段(适配常见的timestamp、time键,值为YYYY-MM-DD HH:MM:SS格式) timestamp_regex = r'(timestamp|time)=(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})' # 匹配所有非时间戳的键值对,键由字母/数字/下划线组成,值为=后到空格/行尾的内容 sensitive_regex = r'(\b[a-zA-Z0-9_]+=)([^ \n]+)' # 先替换所有非时间戳的敏感值 masked_content = re.sub(sensitive_regex, r'\1***', log_content) # 还原被误匹配的时间戳值 masked_content = re.sub(timestamp_regex, r'\1=\2', masked_content) return masked_content # 测试示例 sample_log = """ timestamp=2024-05-20 15:40:00 user=john_doe pass=P@ssw0rd123 api_key=XYZ789ABC db_conn=mysql://admin:dbpass@192.168.1.1:3306/mydb custom_token=abcdef123456 endpoint=https://prod.example.com/api """ print(mask_sensitive_logs(sample_log))
正则细节
(\b[a-zA-Z0-9_]+=):捕获作为独立单词的键名+=,确保不会匹配日志中类似url=https://xxx里的子串([^ \n]+):匹配=右侧直到空格或行尾的所有内容,覆盖无引号包裹的各类值- 时间戳单独处理:通过反向引用还原时间字段,避免误屏蔽
扩展适配
如果日志里的敏感值带引号包裹,可添加以下正则处理:
# 适配带双引号的键值对 quoted_regex = r'(\b[a-zA-Z0-9_]+=)"([^"]+)"' masked_content = re.sub(quoted_regex, r'\1"***"', masked_content)
内容的提问来源于stack exchange,提问作者Navdeep Singh
相关产品推荐
相关产品推荐

