知识卡片
为不同访问者定制专属接口防止越权风险
内容
定制服务指为每个访问者单独提供只含其所需方法的接口,而非共用大接口靠口头约束权限。图书 查询系统曾让公网和内部管理员共用IBookSearcher,管理员专属的complexSearch因口头约束 疏漏被公网调用,高并发拖垮服务器。解法是拆成ISimpleBookSearcher与IComplexBookSearcher 两个接口。发散:接口层面的越权风险比代码逻辑错误更隐蔽,编译器和测试都不会报错。
参考来源
- 位置:《设计模式之禅(第2版)》第4章《接口隔离原则》(源文件:_epub-src/text/part0017.html)
- 结论依据:原文详述图书查询系统因公网与内部管理员共用同一接口、口头约束未能阻止越权调用complexSearch方法,导致应用服务器性能故障,随后给出拆分为ISimpleBookSearcher/IComplexBookSearcher两个接口的解决方案。
- 原始内容:提供给公网的查询接口和提供给系统内管理人员的接口是相同的,都是IBookSearcher接口,但是权限不同……在设计时通过口头约束,这个方法是不可被调用的,但是由于公网项目组的疏忽,这个方法还是公布了出去……这就是一个臃肿接口引起性能故障的案例。