极客视点
极客时间编辑部
极客时间编辑部
113245 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/03:58
登录|注册

停止滥用外部依赖,请明智地使用它们

讲述:初明明大小:3.64M时长:03:58
你好,欢迎收听极客视点。
假设你想使用你最喜欢的编程语言为你的系统构建一个代理服务器,你该怎么办?首先选择自己比较熟悉的 Web 框架,这样就有了一个项目脚手架,然后就可以直接开始实现了。完成这个简单的步骤后,你就可以启动服务器并立即接收 HTTP 请求。在服务器中,你希望根据请求的源地址和内容体对请求进行身份验证和流量过滤,因此,除了 Web 服务器框架之外,你还得选择并安装一个中间件来处理身份验证,以及一个库来简化新请求的处理和过滤。
或许你不希望重复造轮子,使用了一些胶水代码将所有这些部分粘结在一起,然后做一些单元和集成测试,检查一切是否正常,然后就可以开始下一步的工作了。
而这样做的问题你也很清楚,项目 80% 的代码都是别人的,来自项目使用的外部库,只有 20% 的代码是自己的,你自己的代码是作为胶水和粗略的定制,使你的用例可以使用那些库。但最终构建出来的系统健壮吗?有弹性吗?能长久吗?
工程师阿方索·德拉罗沙(Alfonso de la Rocha)认为,如果想把软件工程视为一种工程实践(它值得),就需要开始构建健壮的、有弹性的和长久的系统,并且不要草率地在项目中加入任何你偶然遇到的代码片段。对于外部依赖,应该“明智地使用它们”,不要使用你发现的第一个“有效”的库,应该花一些时间研究可选方案,从而选择一个更符合你需求的,甚至完全放弃使用库,自己编写代码来完成这项任务。
为什么尽量避免过度使用外部依赖呢?阿方索·德拉罗沙认为,至少你应该知道使用库存在如下这些风险。
第一,你使用的库和外部依赖可能已经过时、缺少维护,或者存在隐藏的安全缺陷和性能瓶颈。当你是代码的所有者时,你知道自己在做什么,但是当你使用其他地方的代码时,你不知道开发人员是否犯了错误(如果你不阅读和理解你添加到项目中的代码)。你不知道他是否使用了低效的实现,或者如果你不检查源代码,也不知道他是否添加了恶意代码。更重要的是,如果开发者放弃了这个库,而你在未来的系统中还需要依赖它,那该怎么办?那就需要你了解所使用的代码。
攻击者经常使用社会化工程将他们的包放入应用程序中。他们创建一个具有有用特性的包,然后偷偷加入一些恶意代码。一旦代码进入应用程序,用户启动应用程序时,这些代码就会攻击用户,相应的案例非常多。
第二,库会显著增加代码的大小和编译时间。你可能会遇到这样的场景:你包含一个完整的库来执行某项任务,但最终使用的是整个库的一个函数。或者,在 package.json 中有些依赖项,你在开发和试验解决方案时用到了但最后忘了清理,这些都会给你的任务带来麻烦。
第三,库可能会向你隐瞒解决方案中的许多权衡、设计决策和潜在的故障点。与信任各种外部依赖项相比,在系统所有的基本代码都由你完全设计并实现时,识别潜在的攻击媒介要容易得多。
第四,在系统中不使用任何库是一种挑战和乐趣。你可以试着这样设计一次,你会看到在这个过程中你学到了多少东西,如何更好地掌握和理解你所选择的编程语言,以及完全控制你的系统,这会给你带来新的感受。
总之,更新一个库不应该破坏你的系统,而考虑到它们应该能够在自然环境中运行数年,不需要任何外部管理或维护,一个软件应该尽可能地按照设计桥梁的方式来设计。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
10
沉浸
阅读
分享
手机端
快捷键
回顶部