代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

39 | 怎么控制好代码的权力?

特权代码要短小
AccessController.doPrivileged​()方法
final修饰符的使用
优先级顺序
三个修饰符:public、protected、private
模块化的优势
模块的权限设计(module-info.java)
限制特权代码
修改的权限
接口的访问权限
模块的访问权限
最小限度的授予
最小权力的设计
练习题:twoSum方法的权力设计问题
代码权力的设计
最小授权的原则
一起来动手
信息和资源需经授权才可使用
敏感信息经过授权才可以使用
怎么控制好代码的权力?
怎么控制好代码的权力?

该思维导图由 AI 生成,仅供参考

在前面,我们讨论了“敏感信息经过授权才可以使用”的这样一条有关编码安全的实践。我们还可以把这个实践扩展到更大的范围:信息和资源,需经授权,方可使用。这个信息和资源,不仅仅包括用户数据这样的敏感信息,还包括计算机代码、产品和服务。
授权使用这些资源,需要遵循“最小授权”的原则。所授予的权力,能够让应用程序完成对应的任务就行,不要授予多余的权力。为了方便,我们可以把“最小授权”这个概念拆分成如下的两个部分来理解:
最小权力的设计
最小限度的授予

最小权力的设计

其实,不管使用什么编程语言,我们编写的代码都会涉及到代码权力的设计。最常见的设计,就是代码的访问控制权限的设计。
一段代码访问应用程序接口的过程,一般需要至少两个步骤,第一步是加载类库,第二步是调用接口。这两个步骤,都需要设计好访问控制权限。

模块的访问权限

下面的例子,就是一个 Java 模块的权限设计(module-info.java)。这个权限设计,定义了一个 example.coding 模块。这个模块允许外部代码使用它提供的 com.example.coding 内部接口。
module example.coding {
exports com.example.coding;
}
这个模块可能还包含其他的接口,比如位于 com.example.implement 包内的代码。由于模块的定义没有允许外部代码使用除了 com.example.coding 包空间以外的接口,那么 com.example.implement 包内的接口,即便是 public 接口,外部代码也不能直接访问了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了控制代码权限的重要性以及相关的最小授权原则。文章首先讨论了最小权限的设计,包括模块和接口的访问权限,强调了将开放的接口和封闭的代码分割开来,以提高代码的安全性和可维护性。其次,文章提到了最小限度的授予权限,强调了避免赋予过多的权力,以防止安全漏洞和攻击。此外,文章还介绍了特权代码的使用和设计原则,强调了特权代码要短小,并建议优先考虑使用指定权力的接口。最后,文章指出了代码权力设计的重要性,并提供了一个练习题来分析代码中的权力设计问题。总的来说,本文通过讨论代码权限控制的原则和实践,强调了在编码过程中应该注重安全性和权限的合理控制。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Sebastian
    类、方法、两个参数都可以改成final,内部变量complement也可以是final。 有个疑问,final关键词出了安全之外,会不会影响性能?会不会性能更好?

    作者回复: 我没有测试过final关键字对性能的影响;暂时还没有想到编译器该怎么处理,才能提升使用final关键字的性能。不过,是一个有意思的点!

    2022-08-05归属地:美国
  • ifelse
    在编码的过程中,要考虑代码的权力;权力的设计和使用,要遵循“优先最小权限”的原则。--记下来
    2022-08-01归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部