Searching...
Deutsch
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
Hören

Wichtige Erkenntnisse

1. Frameworks gewährleisten Sicherheit und Zuverlässigkeit in Anwendungen

Frameworks ermöglichen die Wiederverwendung von Code: Anstatt alle Sicherheits- und Zuverlässigkeitsaspekte für eine bestimmte Funktionalität oder ein Feature zu berücksichtigen, müssen Entwickler nur einen spezifischen Baustein anpassen.

Standardisierter Schutz. Frameworks bieten einen konsistenten Ansatz zur Bewältigung gängiger Sicherheits- und Zuverlässigkeitsprobleme in mehreren Anwendungen. Durch die Zentralisierung kritischer Funktionen wie Authentifizierung, Autorisierung und Fehlerbehandlung verringern Frameworks die Wahrscheinlichkeit von Schwachstellen, die durch inkonsistente Implementierungen entstehen. Dieser Ansatz ermöglicht es Fachexperten, sichere Bausteine zu entwerfen und zu entwickeln, von denen alle Teams profitieren, die das Framework nutzen.

Erhöhte Produktivität. Die Verwendung von Frameworks führt zu einer höheren Produktivität der Entwickler, da sie sich auf die Geschäftslogik konzentrieren können, anstatt Sicherheits- und Zuverlässigkeitsfunktionen neu zu erfinden. Frameworks bieten oft integrierte Tools für Überwachung, Protokollierung und Leistungsoptimierung, die den Entwicklungsprozess weiter rationalisieren. Diese Standardisierung erleichtert es auch, die Sicherheit und Zuverlässigkeit des Codes zu beurteilen, da gängige Muster konsistent über Projekte hinweg angewendet werden.

2. Einfachheit im Code-Design verbessert Sicherheit und Wartbarkeit

Das Vermeiden von YAGNI-Code führt zu verbesserter Zuverlässigkeit, und einfacherer Code führt zu weniger Sicherheitsfehlern, weniger Möglichkeiten für Fehler und weniger Entwicklerzeit, die für die Wartung ungenutzten Codes aufgewendet wird.

Reduzierung der Komplexität. Einfacherer Code ist leichter zu verstehen, zu überprüfen und zu warten. Durch die Befolgung von Prinzipien wie YAGNI (You Aren't Gonna Need It) und das Vermeiden von Überengineering können Entwickler robustere und sicherere Systeme erstellen. Einfacherer Code hat weniger potenzielle Fehlerquellen und ist weniger wahrscheinlich, versteckte Schwachstellen zu enthalten.

Verbesserung der Wartbarkeit. Regelmäßiges Refactoring und die Beseitigung technischer Schulden sind entscheidend, um die Einfachheit des Codes im Laufe der Zeit zu erhalten. Dieser fortlaufende Prozess hilft, die Ansammlung von komplexem, schwer verständlichem Code zu verhindern, der zu Sicherheits- und Zuverlässigkeitsproblemen führen kann. Tools wie Linters und Code-Gesundheitsmetriken können Teams helfen, Verbesserungsbereiche zu identifizieren und hohe Code-Qualitätsstandards zu wahren.

3. Starke Typisierung und Bereinigung verhindern häufige Schwachstellen

Die Verwendung starker Typen schützt Ihren Code vor Fehlern dieser Art, die ein Compiler nicht erfasst.

Typsicherheit. Starke Typisierung hilft, Fehler zur Kompilierzeit statt zur Laufzeit zu erkennen und verhindert viele häufige Schwachstellen, bevor sie in die Produktion gelangen. Durch die Verwendung spezifischer Typen für verschiedene Kontexte (z.B. SafeHtml für HTML-Inhalte, SafeUrl für URLs) können Entwickler Sicherheitsmerkmale von Anfang an durchsetzen. Dieser Ansatz macht es viel schwieriger, Schwachstellen wie SQL-Injection oder Cross-Site-Scripting (XSS) einzuführen.

Eingabevalidierung. Eine ordnungsgemäße Eingabebereinigung ist entscheidend, um Sicherheitslücken zu verhindern. Durch die Verwendung dedizierter Bibliotheken und Frameworks zur Handhabung von Benutzereingaben können Entwickler sicherstellen, dass alle Daten ordnungsgemäß validiert und bereinigt werden, bevor sie in sensiblen Operationen verwendet werden. Dies umfasst:

  • Das Escapen von Sonderzeichen in benutzergenerierten Inhalten
  • Die Validierung und Bereinigung von URLs und Dateipfaden
  • Die Durchsetzung strenger Typprüfungen für alle Eingaben

4. Unit-Tests überprüfen das Verhalten einzelner Komponenten

Unit-Tests werden typischerweise lokal als Teil der Entwicklungsabläufe ausgeführt, um Entwicklern schnelles Feedback zu geben, bevor sie Änderungen am Code einreichen.

Granulare Verifikation. Unit-Tests konzentrieren sich darauf, das Verhalten einzelner Softwarekomponenten isoliert zu überprüfen. Dieser Ansatz ermöglicht es Entwicklern, Fehler früh im Entwicklungsprozess zu erkennen und sicherzustellen, dass jede Komponente korrekt funktioniert, bevor sie integriert wird. Effektive Unit-Test-Praktiken umfassen:

  • Das Schreiben von Tests parallel oder vor dem eigentlichen Code (Test-Driven Development)
  • Die Abdeckung sowohl normaler als auch von Randfällen
  • Die Verwendung von Mocks und Stubs zur Isolierung von Abhängigkeiten

Kontinuierliches Feedback. Durch die Integration von Unit-Tests in den Entwicklungsablauf können Teams Regressionen und unbeabsichtigte Nebeneffekte schnell erkennen. Dieser kontinuierliche Feedback-Loop hilft, die Codequalität zu erhalten und die Einführung neuer Fehler zu verhindern. Automatisierte CI/CD-Pipelines können Unit-Tests bei jeder Codeänderung ausführen und Entwicklern sofortiges Feedback geben.

5. Integrationstests bewerten systemweite Interaktionen

Integrationstests gehen über einzelne Einheiten und Abstraktionen hinaus und ersetzen gefälschte oder ausgeblendete Implementierungen von Abstraktionen wie Datenbanken oder Netzwerkdiensten durch echte Implementierungen.

Systemweite Verifikation. Integrationstests bewerten, wie verschiedene Komponenten eines Systems zusammenarbeiten und decken Probleme auf, die bei der isolierten Prüfung von Einheiten nicht offensichtlich sind. Diese Tests helfen sicherzustellen, dass das System als Ganzes korrekt funktioniert, einschließlich der Interaktionen mit externen Abhängigkeiten wie Datenbanken und APIs. Wichtige Überlegungen für Integrationstests umfassen:

  • Das Einrichten realistischer Testumgebungen
  • Das sichere Verwalten von Testdaten
  • Das Handhaben asynchroner Operationen und Timing-Problemen

Ausgewogenheit zwischen Abdeckung und Geschwindigkeit. Während Integrationstests wertvolle Einblicke in das Systemverhalten bieten, sind sie typischerweise langsamer und ressourcenintensiver als Unit-Tests. Teams müssen das richtige Gleichgewicht zwischen umfassenden Integrationstests und der Aufrechterhaltung schneller Feedback-Loops finden. Strategien wie selektive Integrationstests basierend auf Risikobewertungen können helfen, die Testabdeckung zu optimieren, ohne die Entwicklungsgeschwindigkeit zu opfern.

6. Dynamische Analysetools erkennen Laufzeitfehler und Schwachstellen

Die dynamische Programmanalyse analysiert Software durch Ausführen von Programmen, möglicherweise in virtualisierten oder emulierten Umgebungen, zu Zwecken, die über das bloße Testen hinausgehen.

Erkennung von Laufzeitfehlern. Dynamische Analysetools wie Sanitizer können verschiedene Laufzeitfehler und Schwachstellen erkennen, die durch statische Analyse oder reguläre Tests nicht offensichtlich sind. Diese Tools instrumentieren den Code während der Kompilierung, um Laufzeitprüfungen für Probleme wie:

  • Speicherlecks und Pufferüberläufe
  • Use-after-free-Fehler
  • Datenrennen und Deadlocks
  • Undefiniertes Verhalten

Leistungsüberlegungen. Während dynamische Analysetools wertvolle Einblicke bieten, können sie die Leistung erheblich beeinträchtigen. Teams führen diese Tools oft als Teil von nächtlichen Builds oder dedizierten Testpipelines aus, um das Bedürfnis nach gründlicher Analyse mit der Entwicklungsgeschwindigkeit in Einklang zu bringen. Die durch dynamische Analyse gewonnenen Erkenntnisse können Teams helfen, Fehlerbehebungen zu priorisieren und die allgemeine Codequalität zu verbessern.

7. Fuzz-Tests decken Randfälle und unerwartete Eingaben auf

Fuzzing kann nützlich sein, um die Widerstandsfähigkeit von Diensten zu testen.

Automatisierte Eingabegenerierung. Fuzz-Tests beinhalten die Generierung großer Mengen zufälliger oder halbzufälliger Eingaben, um Fehler und Schwachstellen aufzudecken. Diese Technik ist besonders effektiv beim Auffinden von Randfällen und unerwarteten Verhaltensweisen, die manuelle Tests möglicherweise übersehen. Fuzz-Tests können helfen, zu identifizieren:

  • Speicherbeschädigungsprobleme
  • Eingabevalidierungsfehler
  • Denial-of-Service-Schwachstellen
  • Parsing-Fehler in Dateiformaten oder Netzwerkprotokollen

Kontinuierliches Fuzzing. Die Integration von Fuzz-Tests in kontinuierliche Integrationspipelines ermöglicht es Teams, ihre Systeme ständig auf neue Schwachstellen zu überprüfen. Während sich der Code weiterentwickelt, kann Fuzzing Regressionen oder neue Probleme aufdecken, die durch Änderungen eingeführt wurden. Tools wie libFuzzer und AFL (American Fuzzy Lop) erleichtern die Implementierung von Fuzz-Tests für verschiedene Arten von Software.

8. Kontinuierliche Validierung gewährleistet anhaltende Systemresilienz

Sorgfältig gestaltete Test-Suiten können die Korrektheit verschiedener Softwareteile bewerten, die dieselbe Aufgabe ausführen.

Proaktive Resilienz. Kontinuierliche Validierung geht über traditionelle Tests hinaus, indem das System ständig unter verschiedenen Bedingungen getestet wird. Dieser Ansatz hilft sicherzustellen, dass das System im Laufe der Zeit widerstandsfähig gegen Ausfälle und Angriffe bleibt. Techniken zur kontinuierlichen Validierung umfassen:

  • Chaos-Engineering-Experimente
  • Regelmäßige Notfallwiederherstellungsübungen
  • Automatisierte Sicherheitsüberprüfungen und Penetrationstests
  • Leistungstests unter realistischen Lastbedingungen

Evolvierende Bedrohungsmodelle. Während Systeme wachsen und sich weiterentwickeln, können neue Schwachstellen und Ausfallmodi auftreten. Kontinuierliche Validierung hilft Teams, diesen Herausforderungen einen Schritt voraus zu sein, indem sie regelmäßig die Resilienz ihrer Systeme neu bewerten. Dieser Prozess sollte die Aktualisierung von Bedrohungsmodellen, die Überarbeitung von Testszenarien und die Einbeziehung von Lehren aus realen Vorfällen und Beinaheunfällen umfassen.

Last updated:

Rezensionen

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

Sichere und zuverlässige Systeme aufbauen erhält gemischte Bewertungen, mit einer durchschnittlichen Bewertung von 3,90 von 5. Leser schätzen die umfassende Abdeckung von Sicherheits- und Zuverlässigkeitsprinzipien, insbesondere für große Organisationen. Viele finden es wertvoll für Schulungen und als Nachschlagewerk. Einige kritisieren jedoch die Struktur, Weitschweifigkeit und gelegentliche Unklarheit. Das Buch wird für die Integration von Sicherheits- und Zuverlässigkeitskonzepten gelobt, aber auch dafür, dass es stark auf Google ausgerichtet ist. Während einige Kapitel als zu theoretisch oder detailliert angesehen werden, sind andere äußerst praxisnah. Insgesamt wird es für Sicherheitsexperten und SREs empfohlen.

Über den Autor

Heather Adkins ist eine angesehene Fachfrau im Bereich der Cybersicherheit und Informationstechnologie. Als Autorin hat sie bedeutende Beiträge zur Literatur über sichere und zuverlässige Systeme geleistet, basierend auf ihrer umfangreichen Erfahrung in der Branche. Adkins ist bekannt für ihre Arbeit bei Google, wo sie eine entscheidende Rolle bei der Entwicklung und Implementierung von Sicherheitspraktiken gespielt hat. Ihre Expertise erstreckt sich auf Bereiche wie Risikomanagement, Incident Response und Sicherheitsengineering. Durch ihre Schriften möchte Adkins bewährte Verfahren und Erkenntnisse aus der Arbeit in groß angelegten Technologieumgebungen teilen, um anderen Organisationen zu helfen, ihre Sicherheits- und Zuverlässigkeitsstandards zu verbessern.

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.