Skip to content

Commit 6fd6e89

Browse files
Tweak toc to make markdownlint happy
Signed-off-by: David A. Wheeler <[email protected]>
1 parent 5943791 commit 6fd6e89

File tree

2 files changed

+152
-8
lines changed

2 files changed

+152
-8
lines changed

makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
all: lint toc.md
44

5-
lint:
5+
lint: toc.md
66
markdownlint --config .github/linters/.markdown-lint.yml \
7-
secure_software_development_fundamentals.md
7+
secure_software_development_fundamentals.md toc.md
88

9-
toc.md: lint secure_software_development_fundamentals.md tocignore
9+
toc.md: secure_software_development_fundamentals.md tocignore
1010
grep -E '^#{1,3} ' secure_software_development_fundamentals.md | \
11-
grep -E -v -f tocignore | sed 's/^# Part /Part /' > toc.md
11+
grep -E -v -f tocignore | while read line; do echo "$$line"; echo; done > toc.md

toc.md

Lines changed: 148 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,288 @@
1-
Part I: Requirements, Design, and Reuse
1+
# Part I: Requirements, Design, and Reuse
2+
23
# Course Introduction
4+
35
## Introduction
6+
47
## A Note from the Author
8+
59
## Motivation
10+
611
### Motivation: Why Is It Important to Secure Software?
12+
713
### Motivation: Why Take This course?
14+
815
# Security Basics
16+
917
## What Do We Need?
18+
1019
### What Does “Security” Mean?
20+
1121
### Security Requirements
22+
1223
### What Is Privacy and Why It Is Important
24+
1325
### Privacy Requirements
26+
1427
## How Can We Get There?
28+
1529
### Risk Management
30+
1631
### Development Processes / Defense-in-Breadth
32+
1733
### Protect, Detect, Respond
34+
1835
### Vulnerabilities
36+
1937
# Design
38+
2039
## Secure Design Basics
40+
2141
### What Are Security Design Principles?
42+
2243
### Widely-Recommended Secure Design Principles
44+
2345
### Least Privilege
46+
2447
### Complete Mediation (Non-Bypassability)
48+
2549
### The Rest of the Saltzer & Schroeder Design Principles
50+
2651
### Other Design Principles
52+
2753
# Reusing External Software
54+
2855
## Supply Chain
56+
2957
### Basics of Reusing Software
58+
3059
### Selecting (Evaluating) Open Source Software
60+
3161
### Downloading and Installing Reusable Software
62+
3263
### Updating Reused Software
33-
Part II: Implementation
64+
65+
# Part II: Implementation
66+
3467
# Basics of Implementation
68+
3569
### Implementation Overview
70+
3671
# Input Validation
72+
3773
## Input Validation Basics
74+
3875
### Input Validation Basics Introduction
76+
3977
### How Do You Validate Input?
78+
4079
## Input Validation: Numbers and Text
80+
4181
### Input Validation: A Few Simple Data Types
82+
4283
### Sidequest: Text, Unicode, and Locales
84+
4385
### Validating Text
86+
4487
### Introduction to Regular Expressions
88+
4589
### Using Regular Expressions for Text Input Validation
90+
4691
### Countering ReDoS Attacks on Regular Expressions
92+
4793
## Input Validation: Beyond Numbers and Text
94+
4895
### Insecure Deserialization
96+
4997
### Input Data Structures (XML, HTML, CSV, JSON, & File Uploads)
98+
5099
### Minimizing Attack Surface, Identification, Authentication, and Authorization
100+
51101
### Search Paths and Environment Variables (including setuid/setgid Programs)
102+
52103
### Special Inputs: Secure Defaults and Secure Startup
104+
53105
## Consider Availability on All Inputs
106+
54107
### Consider Availability on All Inputs Introduction
108+
55109
# Processing Data Securely
110+
56111
## Processing Data Securely: General Issues
112+
57113
### Prefer Trusted Data. Treat Untrusted Data as Dangerous
114+
58115
### Avoid Default & Hardcoded Credentials
116+
59117
### Avoid Incorrect Conversion or Cast
118+
60119
## Processing Data Securely: Undefined Behavior / Memory Safety
120+
61121
### Countering Out-of-Bounds Reads and Writes (Buffer Overflow)
122+
62123
### Double-free, Use-after-free, and Missing Release
124+
63125
### Avoid Undefined Behavior
126+
64127
## Processing Data Securely: Calculate Correctly
128+
65129
### Avoid Integer Overflow, Wraparound, and Underflow
130+
66131
# Calling Other Programs
132+
67133
## Introduction to Securely Calling Programs
134+
68135
### Introduction to Securely Calling Programs - The Basics
136+
69137
## Calling Other Programs: Injection and Filenames
138+
70139
### SQL Injection
140+
71141
### OS Command (Shell) injection
142+
72143
### Other Injection Attacks
144+
73145
### Filenames (Including Path Traversal and Link Following)
146+
74147
## Calling Other Programs: Other Issues
148+
75149
### Call APIs for Programs and Check What Is Returned
150+
76151
### Handling Errors
152+
77153
### Logging
154+
78155
### Debug and Assertion Code
156+
79157
### Countering Denial-of-Service (DoS) Attacks
158+
80159
# Sending Output
160+
81161
### Introduction to Sending Output
162+
82163
### Countering Cross-Site Scripting (XSS)
164+
83165
### Content Security Policy (CSP)
166+
84167
### Other HTTP Hardening Headers
168+
85169
### Cookies & Login Sessions
170+
86171
### CSRF / XSRF
172+
87173
### Open Redirects and Forwards
174+
88175
### HTML **target** and JavaScript **window.open()**
176+
89177
### Using Inadequately Checked URLs / Server-Side Request Forgery (SSRF)
178+
90179
### Same-Origin Policy and Cross-Origin Resource Sharing (CORS)
180+
91181
### Format Strings and Templates
182+
92183
### Minimize Feedback / Information Exposure
184+
93185
### Side-Channel Attacks
94-
Part III: Verification and More Specialized Topics
186+
187+
# Part III: Verification and More Specialized Topics
188+
95189
# Verification
190+
96191
## Basics of Verification
192+
97193
### Verification Overview
194+
98195
## Static Analysis
196+
99197
### Static Analysis Overview
198+
100199
### Software Composition Analysis (SCA)/Dependency Analysis
200+
101201
## Dynamic Analysis
202+
102203
### Dynamic Analysis Overview
204+
103205
### Fuzz Testing
206+
104207
### Web Application Scanners
208+
105209
## Other Verification Topics
210+
106211
### Combining Verification Approaches
212+
107213
# Threat Modeling
214+
108215
## Threat Modeling/Attack Modeling
216+
109217
### Introduction to Threat Modeling
218+
110219
### STRIDE
220+
111221
# Cryptography
222+
112223
## Applying Cryptography
224+
113225
### Introduction to Cryptography
226+
114227
### Symmetric/Shared Key Encryption Algorithms
228+
115229
### Cryptographic Hashes (Digital Fingerprints)
230+
116231
### Public-Key (Asymmetric) Cryptography
232+
117233
### Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
234+
118235
### Storing Passwords
236+
119237
### Transport Layer Security (TLS)
238+
120239
### Other Topics in Cryptography
240+
121241
# Other Topics
242+
122243
## Vulnerability Disclosures
244+
123245
### Receiving Vulnerability Reports
246+
124247
### Respond To and Fix the Vulnerability in a Timely Way
248+
125249
### Sending Vulnerability Reports to Others
250+
126251
## Miscellaneous
252+
127253
### Assurance Cases
254+
128255
### Harden the Development Environment (Including Build and CI/CD Pipeline) & Distribution Environment
256+
129257
### Distributing, Fielding/Deploying, Operations, and Disposal
258+
130259
### Artificial Intelligence (AI), Machine Learning (ML), and Security
260+
131261
### Formal Methods
262+
132263
## Top Vulnerability Lists
264+
133265
### OWASP Top 10
266+
134267
### CWE Top 25
268+
135269
## Concluding Notes
270+
136271
### Conclusions
137-
Part IV: Supporting Materials Not Part of the Course
272+
273+
# Part IV: Supporting Materials Not Part of the Course
274+
138275
# Glossary
276+
139277
# Further Reading
278+
140279
# Old Mappings
280+
141281
## OWASP Top 10 and CWE Top 25
282+
142283
### OWASP Top 10 (2017 edition)
284+
143285
### CWE Top 25 (2019 edition)
286+
144287
# References
288+

0 commit comments

Comments
 (0)