主要观点:一直希望有能以最小开发成本防止暴露敏感数据的类型系统,为此为 Go 设计了inproc[T]
和xproc[T]
两种新容器类型及全局函数larry()
,它们在编译时被移除,实现近乎零成本的数据隐私设置,无需运行时更改,除基于反射的检查外。
关键信息:
- 许多应用中有敏感数据需以明文形式使用,如服务器应用中的用户密码哈希等,处理这些值易导致敏感数据泄露。
- 现有技术如访问修饰符、自定义序列化等各有缺点,不能有效防止敏感数据泄露。
inproc[T]
表示不应跨进程边界使用的值,xproc[T]
表示可跨进程边界使用的值,它们有独特的变异规则,在二进制表达式、赋值、函数参数、返回值等场景中表现不同,集合类型不能被标记为inproc
或xproc
。- 需有从
inproc[T]
到xproc[T]
的显式转换,通过larry()
函数实现,可明确敏感值的有意暴露。 inproc[T]
和xproc[T]
在 Go 的 IR 构造阶段被擦除,larry
函数在编译时被优化掉,实现近乎零成本的数据隐私设置,encoding/json.Marshal
函数需修改以处理inproc[T]
值。
重要细节:- 以 Go 语言为例,展示了
inproc[T]
和xproc[T]
在实际代码中的使用,如在InvoiceBuilder
和GetInvoice
函数中的应用,明确了在需要时可轻松暴露敏感信息,同时避免在跨进程上下文中误使用inproc
值。 - 提出下一步希望听取他人意见,可通过邮件、在 Hacker News 等平台评论、私信或大声喊叫等方式联系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。