Django Silk 通过 SILKY_SENSITIVE_KEYS(set 类型)配置敏感字段自动屏蔽,支持 case-insensitive 匹配;需开启 SILKY_HIDE_COOKIES=True 隐藏 Cookie;用 SILKY_MAX_REQUEST_BODY_SIZE 等限制请求体大小防泄露;其屏蔽仅作用于日志记录层,不替代数据库级脱敏。
怎么在 Django Silk 中配置敏感字段自动屏蔽
django silk 默认就开了敏感数据屏蔽,不用额外装包或写中间件——只要它检测到请求里有 password、token、secret 这类关键词,就会把对应值替换成 ********************。但默认列表不覆盖所有业务场景,比如你自定义了 auth_ticket 或 session_key_v2,就得手动加进去。
- 在
settings.py里直接覆盖SILKY_SENSITIVE_KEYS,用 set 而不是 list(否则会报错):SILKY_SENSITIVE_KEYS = {'password', 'token', 'secret', 'auth_ticket', 'session_key_v2'} - 别漏掉大小写变体:Silk 的匹配是 case-insensitive,但字段名本身可能带下划线或驼峰,建议把常见写法都列全,比如
api_key和APIKey都加上 - 屏蔽只作用于请求头、查询参数、表单数据和 JSON body;对 URL 路径里的参数(如
/user/123?token=abc)也生效,但不会处理重定向跳转后的完整 URL 字符串 - 如果发现某个字段没被屏蔽,先检查是不是被解析成嵌套结构了——Silk 默认只扫一层,深层 JSON(如
{"data": {"user": {"password": "123"}}})里的password不会被识别,得靠自定义 processor 解决
为什么 SILKY_HIDE_COOKIES=True 必须开
Cookies 是最常被忽略的敏感泄露口:Session ID、CSRF Token、登录态标识几乎都藏在里面,而 Silk 默认会原样记录整段 Cookie 头。即使你屏蔽了 token,sessionid=abc123xyz 还是明文躺在 Silk UI 里,点一下就能复用。
- 必须在
settings.py显式设置SILKY_HIDE_COOKIES = True,否则 Silk 会把整个 Cookie 字符串记下来(包括分号分隔的多个键值对) - 这个开关不影响请求实际发送,只是让 Silk 在入库前清空
request.headers['Cookie']字段,UI 上显示为[REDACTED] - 注意:它不处理
Set-Cookie响应头,所以响应里的新 Cookie 仍可见——如果你需要隐藏,得配合自定义response_processor
如何限制请求体大小防止日志膨胀
大文件上传、长文本提交、Base64 图片等内容一旦进 Silk,不仅拖慢 UI 加载,还可能把敏感原始数据(比如身份证照片的 base64)完整存进数据库。Silk 默认不限制 body 大小,这是生产环境最容易翻车的地方。
- 用
SILKY_MAX_REQUEST_BODY_SIZE和SILKY_MAX_RESPONSE_BODY_SIZE控制上限,单位是字节:SILKY_MAX_REQUEST_BODY_SIZE = 1024 # 只存前 1KB
- 设太小会导致 JSON 解析失败(比如截断在中间),Silk 会把这部分标记为
[TRUNCATED]并跳过字段扫描——意味着本该屏蔽的password可能漏掉 - 建议值:1KB 适合纯 API 调试;如果要支持小图上传,可放宽到 10KB,但务必配合
SILKY_SENSITIVE_KEYS扩展,因为截断后字段名可能残缺(如"passw)
动态屏蔽 vs 静态脱敏:Silk 不是数据库层方案
Silk 的屏蔽只发生在请求/响应记录阶段,属于「日志级脱敏」,不是数据库字段级的动态掩码(像 Azure SQL 的 DDM)。它不改原始数据,也不影响业务逻辑,但也不能替代存储层保护。
- 别指望 Silk 屏蔽能防 SQL 注入或越权读取——它只管自己记录的日志,后端代码该查出什么还是什么
- 如果你需要对开发人员查生产库时自动遮掩手机号、邮箱,得用数据库原生能力(如 SQL Server 的
ADD MASKED WITH (FUNCTION = 'default()')),而不是靠 Silk - 一个典型误用:把 Silk 当作“测试环境数据保护唯一手段”,结果测试脚本直接连生产 DB,Silk 日志里没敏感值,但脚本早把明文导出到本地文件了
真正难的是边界判断:哪些字段该进 SILKY_SENSITIVE_KEYS,哪些该走数据库 DDM,哪些必须前端加密——这得看数据流向,不是配个开关就能闭环的。










