Skip to content

Commit 45cf10d

Browse files
Auto-generate TOC in HTML
Signed-off-by: David A. Wheeler <[email protected]>
1 parent 62924b6 commit 45cf10d

File tree

1 file changed

+1
-292
lines changed

1 file changed

+1
-292
lines changed

docs/lfd121.md

Lines changed: 1 addition & 292 deletions
Original file line numberDiff line numberDiff line change
@@ -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:
67236723
3. final exam for each of the 3 courses: 15 questions, preferably multiple choice, different than the ones in the end of chapter quizzes.
67246724

67256725
Items 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

Comments
 (0)