Searching...
简体中文
English
Español
简体中文
Français
Deutsch
日本語
Português
Italiano
한국어
Русский
Nederlands
العربية
Polski
हिन्दी
Tiếng Việt
Svenska
Ελληνικά
Türkçe
ไทย
Čeština
Română
Magyar
Українська
Bahasa Indonesia
Dansk
Suomi
Български
עברית
Norsk
Hrvatski
Català
Slovenčina
Lietuvių
Slovenščina
Српски
Eesti
Latviešu
فارسی
മലയാളം
தமிழ்
اردو
Building Secure and Reliable Systems

Building Secure and Reliable Systems

Best Practices for Designing, Implementing, and Maintaining Systems
by Heather Adkins 2020 555 pages
Technology
Engineering
Technical
8 minutes

重点摘要

1. 框架在应用程序中强制执行安全性和可靠性

框架实现代码重用:开发人员只需定制特定的构建模块,而不必考虑影响某个功能或特性的所有安全性和可靠性方面。

标准化保护。 框架提供了一种一致的方法来解决多个应用程序中的常见安全性和可靠性问题。通过集中处理关键功能,如身份验证、授权和错误处理,框架减少了由于不一致实现而导致的漏洞可能性。这种方法允许领域专家设计和开发安全的构建模块,所有使用该框架的团队都能从中受益。

提高生产力。 使用框架可以提高开发人员的生产力,因为他们可以专注于业务逻辑,而不是重新发明安全性和可靠性特性。框架通常附带内置的监控、日志记录和性能优化工具,进一步简化了开发过程。这种标准化也使得代码的安全性和可靠性更容易理解,因为常见模式在项目中得到一致应用。

2. 简化代码设计增强安全性和可维护性

避免YAGNI代码可以提高可靠性,简化的代码减少了安全漏洞、错误机会和开发人员维护未使用代码的时间。

减少复杂性。 简单的代码更容易理解、审查和维护。通过遵循YAGNI(你不会需要它)等原则并避免过度设计,开发人员可以创建更健壮和安全的系统。简单的代码有更少的潜在故障点,也不太可能包含隐藏的漏洞。

提高可维护性。 定期重构和解决技术债务对于长期保持代码简洁至关重要。这一持续过程有助于防止复杂、难以理解的代码积累,从而导致安全性和可靠性问题。像linter和代码健康指标这样的工具可以帮助团队识别改进区域并保持高代码质量标准。

3. 强类型和数据清理防止常见漏洞

使用强类型保护代码免受编译器无法捕捉的错误。

类型安全。 强类型有助于在编译时而不是运行时捕捉错误,从而在漏洞进入生产环境之前防止许多常见漏洞。通过在不同上下文中使用特定类型(例如,SafeHtml用于HTML内容,SafeUrl用于URL),开发人员可以通过设计强制执行安全属性。这种方法使得引入SQL注入或跨站脚本(XSS)等漏洞变得更加困难。

输入验证。 适当的数据清理对于防止安全漏洞至关重要。通过使用专用库和框架处理用户输入,开发人员可以确保所有数据在用于敏感操作之前得到正确验证和清理。这包括:

  • 转义用户生成内容中的特殊字符
  • 验证和清理URL和文件路径
  • 对所有输入强制执行严格的类型检查

4. 单元测试验证单个组件的行为

单元测试通常在本地作为工程工作流的一部分运行,以便在开发人员提交代码更改之前提供快速反馈。

细粒度验证。 单元测试专注于验证单个软件组件的行为。这种方法允许开发人员在开发过程中早期发现错误,并确保每个组件在集成之前正确运行。有效的单元测试实践包括:

  • 与实际代码同时或之前编写测试(测试驱动开发)
  • 覆盖正常和边缘情况
  • 使用模拟和存根隔离依赖项

持续反馈。 通过将单元测试集成到开发工作流中,团队可以快速捕捉回归和意外副作用。这种持续反馈循环有助于保持代码质量并防止引入新错误。自动化CI/CD管道可以在每次代码更改时运行单元测试,为开发人员提供即时反馈。

5. 集成测试评估系统级交互

集成测试超越了单个单元和抽象,替换了数据库或网络服务等抽象的虚假或存根实现。

系统级验证。 集成测试评估系统不同组件的协同工作,发现单独测试单元时可能无法显现的问题。这些测试有助于确保系统整体功能正确,包括与外部依赖项(如数据库和API)的交互。集成测试的关键考虑因素包括:

  • 设置现实的测试环境
  • 安全管理测试数据
  • 处理异步操作和时间问题

平衡覆盖率和速度。 虽然集成测试提供了宝贵的系统行为见解,但它们通常比单元测试更慢且资源密集。团队需要在全面的集成测试和保持快速反馈循环之间找到适当的平衡。基于风险评估的选择性集成测试策略可以帮助优化测试覆盖率而不牺牲开发速度。

6. 动态分析工具检测运行时错误和漏洞

动态程序分析通过运行程序分析软件,可能在虚拟化或仿真环境中进行,目的不仅仅是测试。

运行时错误检测。 像sanitizer这样的动态分析工具可以检测到静态分析或常规测试可能无法显现的各种运行时错误和漏洞。这些工具在编译期间对代码进行插桩,以添加运行时检查,检测问题如:

  • 内存泄漏和缓冲区溢出
  • 使用后释放错误
  • 数据竞争和死锁
  • 未定义行为

性能考虑。 虽然动态分析工具提供了宝贵的见解,但它们可能显著影响性能。团队通常在夜间构建或专用测试管道中运行这些工具,以平衡彻底分析的需求和开发速度。动态分析获得的见解可以帮助团队优先修复错误并提高整体代码质量。

7. 模糊测试发现边缘情况和意外输入

模糊测试对于测试服务的弹性非常有用。

自动输入生成。 模糊测试涉及生成大量随机或半随机输入,以发现错误和漏洞。这种技术在发现手动测试可能遗漏的边缘情况和意外行为方面特别有效。模糊测试可以帮助识别:

  • 内存损坏问题
  • 输入验证缺陷
  • 拒绝服务漏洞
  • 文件格式或网络协议中的解析错误

持续模糊测试。 将模糊测试集成到持续集成管道中,允许团队不断探测系统中的新漏洞。随着代码库的发展,模糊测试可以发现回归或由更改引入的新问题。像libFuzzer和AFL(American Fuzzy Lop)这样的工具使得为各种类型的软件实施模糊测试变得更容易。

8. 持续验证确保系统的持续弹性

精心设计的测试套件可以评估执行相同任务的不同软件部分的正确性。

主动弹性。 持续验证超越了传统测试,通过在各种条件下不断运行系统来确保其弹性。此方法有助于确保系统在面对故障和攻击时保持弹性。持续验证技术包括:

  • 混沌工程实验
  • 定期灾难恢复演练
  • 自动化安全扫描和渗透测试
  • 在现实负载条件下进行性能压力测试

不断演变的威胁模型。 随着系统的增长和演变,新的漏洞和故障模式可能会出现。持续验证帮助团队在这些挑战面前保持领先,通过定期重新评估系统的弹性。此过程应包括更新威胁模型、修订测试场景以及从实际事件和近乎失误中吸取教训。

Last updated:

评论

3.9 out of 5
Average of 100+ ratings from Goodreads and Amazon.

《构建安全可靠的系统》获得了褒贬不一的评价,平均评分为3.90分(满分5分)。读者们赞赏其对安全性和可靠性原则的全面覆盖,特别是对于大型组织而言。许多人认为这本书在培训和作为参考指南方面非常有价值。然而,有些人批评其结构、冗长以及偶尔缺乏清晰度。该书因整合了安全性和可靠性概念而受到赞扬,但也被指出过于以谷歌为中心。尽管某些章节被认为过于理论化或详细,其他章节则非常实用。总体而言,这本书推荐给安全专业人士和SREs。

关于作者

Heather Adkins 是网络安全和信息技术领域的杰出专业人士。作为一名作者,她在安全和可靠系统的文献中做出了重要贡献,借鉴了她在行业中的丰富经验。Adkins 因在谷歌的工作而闻名,她在开发和实施安全实践方面发挥了关键作用。她的专业知识涵盖风险管理、事件响应和安全工程等领域。通过写作,Adkins 旨在分享在大规模技术环境中工作的最佳实践和见解,帮助其他组织提高其安全性和可靠性。

0:00
-0:00
1x
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Listening – audio summariesListen to the first takeaway of every book for free, upgrade to Pro for unlimited listening.
Unlock unlimited listening
Your first week's on us
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 5: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Sep 26,
cancel anytime before.
What our users say
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Compare Features
Free Pro
Read full text summaries
Listen to full summaries
Unlimited Bookmarks
Unlimited History
Benefits
Get Ahead in Your Career
People who read at least 7 business books per year earn 2.3 times more on average than those who only read one book per year.
Unlock Knowledge Faster (or Read any book in 10 hours minutes)
How would your life change if we gave you the superpower to read 10 books per month?
Access 12,000+ hours of audio
Access almost unlimited content—if you listen to 1 hour daily, it’ll take you 33 years to listen to all of it.
Priority 24/7 AI-powered and human support
If you have any questions or issues, our AI can resolve 90% of the issues, and we respond in 2 hours during office hours: Mon-Fri 9 AM - 9 PM PT.
New features and books every week
We are a fast-paced company and continuously add more books and features on a weekly basis.
Fun Fact
2.8x
Pro users consume 2.8x more books than free users.
Interesting Stats
Reduced Stress: Reading for just 6 minutes can reduce stress levels by 68%
Reading can boost emotional development and career prospects by 50% to 100%
Vocabulary Expansion: Reading for 20 minutes a day are exposed to about 1.8 million words per year
Improved Cognitive Function: Reading can help reduce mental decline in old age by up to 32%.
Better Sleep: 50% of people who read before bed report better sleep.
Can I switch plans later?
Yes, you can easily switch between plans.
Is it easy to cancel?
Yes, it's just a couple of clicks. Simply go to Manage Subscription in the upper-right menu.
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.