@@ -184,7 +184,7 @@ Dr. David A. Wheeler is an expert in developing secure software and in open sour
184184
185185# Table of contents
186186
187- [[TOC]]
187+ {:toc}
188188
189189# Part I: Requirements, Design, and Reuse
190190
@@ -6723,294 +6723,3 @@ The LF education team needs:
672367233. final exam for each of the 3 courses: 15 questions, preferably multiple choice, different than the ones in the end of chapter quizzes.
67246724
67256725Items 2 and 3 are covered in a separate file, to protect their confidentiality.
6726-
6727- # Part I: Requirements, Design, and Reuse
6728-
6729- # Course Introduction
6730-
6731- ## Introduction
6732-
6733- ## A Note from the Author
6734-
6735- ## Motivation
6736-
6737- ### Motivation: Why Is It Important to Secure Software?
6738-
6739- ### Motivation: Why Take This course?
6740-
6741- # Security Basics
6742-
6743- ## What Do We Need?
6744-
6745- ### What Does “Security” Mean?
6746-
6747- ### Security Requirements
6748-
6749- ### What Is Privacy and Why It Is Important
6750-
6751- ### Privacy Requirements
6752-
6753- ## How Can We Get There?
6754-
6755- ### Risk Management
6756-
6757- ### Development Processes / Defense-in-Breadth
6758-
6759- ### Protect, Detect, Respond
6760-
6761- ### Vulnerabilities
6762-
6763- # Design
6764-
6765- ## Secure Design Basics
6766-
6767- ### What Are Security Design Principles?
6768-
6769- ### Widely-Recommended Secure Design Principles
6770-
6771- ### Least Privilege
6772-
6773- ### Complete Mediation (Non-Bypassability)
6774-
6775- ### The Rest of the Saltzer & Schroeder Design Principles
6776-
6777- ### Other Design Principles
6778-
6779- # Reusing External Software
6780-
6781- ## Supply Chain
6782-
6783- ### Basics of Reusing Software
6784-
6785- ### Selecting (Evaluating) Open Source Software
6786-
6787- ### Downloading and Installing Reusable Software
6788-
6789- ### Updating Reused Software
6790-
6791- # Part II: Implementation
6792-
6793- # Basics of Implementation
6794-
6795- ### Implementation Overview
6796-
6797- # Input Validation
6798-
6799- ## Input Validation Basics
6800-
6801- ### Input Validation Basics Introduction
6802-
6803- ### How Do You Validate Input?
6804-
6805- ## Input Validation: Numbers and Text
6806-
6807- ### Input Validation: A Few Simple Data Types
6808-
6809- ### Sidequest: Text, Unicode, and Locales
6810-
6811- ### Validating Text
6812-
6813- ### Introduction to Regular Expressions
6814-
6815- ### Using Regular Expressions for Text Input Validation
6816-
6817- ### Countering ReDoS Attacks on Regular Expressions
6818-
6819- ## Input Validation: Beyond Numbers and Text
6820-
6821- ### Insecure Deserialization
6822-
6823- ### Input Data Structures (XML, HTML, CSV, JSON, & File Uploads)
6824-
6825- ### Minimizing Attack Surface, Identification, Authentication, and Authorization
6826-
6827- ### Search Paths and Environment Variables (including setuid/setgid Programs)
6828-
6829- ### Special Inputs: Secure Defaults and Secure Startup
6830-
6831- ## Consider Availability on All Inputs
6832-
6833- ### Consider Availability on All Inputs Introduction
6834-
6835- # Processing Data Securely
6836-
6837- ## Processing Data Securely: General Issues
6838-
6839- ### Prefer Trusted Data. Treat Untrusted Data as Dangerous
6840-
6841- ### Avoid Default & Hardcoded Credentials
6842-
6843- ### Avoid Incorrect Conversion or Cast
6844-
6845- ## Processing Data Securely: Undefined Behavior / Memory Safety
6846-
6847- ### Countering Out-of-Bounds Reads and Writes (Buffer Overflow)
6848-
6849- ### Double-free, Use-after-free, and Missing Release
6850-
6851- ### Avoid Undefined Behavior
6852-
6853- ## Processing Data Securely: Calculate Correctly
6854-
6855- ### Avoid Integer Overflow, Wraparound, and Underflow
6856-
6857- # Calling Other Programs
6858-
6859- ## Introduction to Securely Calling Programs
6860-
6861- ### Introduction to Securely Calling Programs - The Basics
6862-
6863- ## Calling Other Programs: Injection and Filenames
6864-
6865- ### SQL Injection
6866-
6867- ### OS Command (Shell) injection
6868-
6869- ### Other Injection Attacks
6870-
6871- ### Filenames (Including Path Traversal and Link Following)
6872-
6873- ## Calling Other Programs: Other Issues
6874-
6875- ### Call APIs for Programs and Check What Is Returned
6876-
6877- ### Handling Errors
6878-
6879- ### Logging
6880-
6881- ### Debug and Assertion Code
6882-
6883- ### Countering Denial-of-Service (DoS) Attacks
6884-
6885- # Sending Output
6886-
6887- ### Introduction to Sending Output
6888-
6889- ### Countering Cross-Site Scripting (XSS)
6890-
6891- ### Content Security Policy (CSP)
6892-
6893- ### Other HTTP Hardening Headers
6894-
6895- ### Cookies & Login Sessions
6896-
6897- ### CSRF / XSRF
6898-
6899- ### Open Redirects and Forwards
6900-
6901- ### HTML **target** and JavaScript **window.open()**
6902-
6903- ### Using Inadequately Checked URLs / Server-Side Request Forgery (SSRF)
6904-
6905- ### Same-Origin Policy and Cross-Origin Resource Sharing (CORS)
6906-
6907- ### Format Strings and Templates
6908-
6909- ### Minimize Feedback / Information Exposure
6910-
6911- ### Avoid caching sensitive information
6912-
6913- ### Side-Channel Attacks
6914-
6915- # Part III: Verification and More Specialized Topics
6916-
6917- # Verification
6918-
6919- ## Basics of Verification
6920-
6921- ### Verification Overview
6922-
6923- ## Static Analysis
6924-
6925- ### Static Analysis Overview
6926-
6927- ### Software Composition Analysis (SCA)/Dependency Analysis
6928-
6929- ## Dynamic Analysis
6930-
6931- ### Dynamic Analysis Overview
6932-
6933- ### Fuzz Testing
6934-
6935- ### Web Application Scanners
6936-
6937- ## Other Verification Topics
6938-
6939- ### Combining Verification Approaches
6940-
6941- # Threat Modeling
6942-
6943- ## Threat Modeling/Attack Modeling
6944-
6945- ### Introduction to Threat Modeling
6946-
6947- ### STRIDE
6948-
6949- # Cryptography
6950-
6951- ## Applying Cryptography
6952-
6953- ### Introduction to Cryptography
6954-
6955- ### Symmetric/Shared Key Encryption Algorithms
6956-
6957- ### Cryptographic Hashes (Digital Fingerprints)
6958-
6959- ### Public-Key (Asymmetric) Cryptography
6960-
6961- ### Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
6962-
6963- ### Storing Passwords
6964-
6965- ### Transport Layer Security (TLS)
6966-
6967- ### Other Topics in Cryptography
6968-
6969- # Other Topics
6970-
6971- ## Vulnerability Disclosures
6972-
6973- ### Receiving Vulnerability Reports
6974-
6975- ### Respond To and Fix the Vulnerability in a Timely Way
6976-
6977- ### Sending Vulnerability Reports to Others
6978-
6979- ## Miscellaneous
6980-
6981- ### Assurance Cases
6982-
6983- ### Harden the Development Environment (Including Build and CI/CD Pipeline) & Distribution Environment
6984-
6985- ### Distributing, Fielding/Deploying, Operations, and Disposal
6986-
6987- ### Artificial Intelligence (AI), Machine Learning (ML), and Security
6988-
6989- ### Formal Methods
6990-
6991- ## Top Vulnerability Lists
6992-
6993- ### OWASP Top 10
6994-
6995- ### CWE Top 25
6996-
6997- ## Concluding Notes
6998-
6999- ### Conclusions
7000-
7001- # Part IV: Supporting Materials Not Part of the Course
7002-
7003- # Glossary
7004-
7005- # Further Reading
7006-
7007- # Old Mappings
7008-
7009- ## OWASP Top 10 and CWE Top 25
7010-
7011- ### OWASP Top 10 (2017 edition)
7012-
7013- ### CWE Top 25 (2019 edition)
7014-
7015- # References
7016-
0 commit comments