gRPC拦截器执行时机及服务端一元拦截器方法校验问询
gRPC拦截器相关问题解答
1. gRPC拦截器在处理流程的哪个阶段执行?
拦截器的执行阶段分客户端和服务端场景,不同类型(一元、流式)的拦截器略有差异:
- 客户端拦截器:在请求序列化并发送至服务端前执行前置逻辑,在收到服务端响应并完成反序列化后执行后置逻辑,常用于统一添加请求头、日志打点、超时控制等场景。
- 服务端拦截器:在请求到达服务端并完成基础解析(如元数据、方法名解析)后、实际业务方法执行前执行前置逻辑,在业务方法执行完毕、响应返回客户端前执行后置逻辑,可用于鉴权、日志、指标埋点等操作。
2. 服务端一元拦截器执行时,gRPC库是否已校验过被调用的方法确实存在?
主流gRPC实现(如Go、Java)中,服务端一元拦截器的执行时机早于方法存在性校验——也就是说,当客户端传入不存在的方法名时,拦截器依然会被触发执行。如果直接按拦截器中拿到的方法名记录指标,攻击者可通过伪造任意方法名向指标后端推送垃圾数据,破坏低基数维度的设计。
要避免这种情况,可在拦截器中主动校验方法合法性:
- 提前维护服务端已注册方法的白名单,拦截器拿到方法名后先匹配白名单,仅对合法方法记录指标
- 利用gRPC提供的服务元数据(如Go中
grpc.Server的注册信息、Java中的ServiceDescriptor),在拦截器中动态校验方法是否属于已注册服务
内容的提问来源于stack exchange,提问作者eof
相关产品推荐
相关产品推荐

