Skip to content

Commit f8e222c

Browse files
Merge pull request ossf#121 from ossf/add_toc
Add toc
2 parents 3611639 + 6fd6e89 commit f8e222c

File tree

4 files changed

+295
-5
lines changed

4 files changed

+295
-5
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ project. Changes that are accepted into the Markdown must go through a series of
2828

2929
Changes to the markdown must have no errors reported by `markdownlint` using our configuration. This is checked when a pull request is made. You can do this check locally by installing markdownlint (e.g., `brew install markdownlint-cli` or `npm install -g markdownlint-cli`) and running `make`.
3030

31+
You can see a generated [table of contents](toc.md) - rerun `make` to regenerate it. This generated file is included in the repository itself for convenience of those new to the document.
32+
3133
This content was originally converted from Google docs format using
3234
[gdocs2md](http://github.com/mangini/gdocs2md),
3335
patched to skip inline drawings.

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

secure_software_development_fundamentals.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3682,7 +3682,7 @@ Thankfully, other than attacks on cryptographic systems, side-channel attacks ar
36823682

36833683
* Not included as part of the free version of the course.
36843684

3685-
# PART III: Verification and More Specialized Topics
3685+
# Part III: Verification and More Specialized Topics
36863686

36873687
# Verification
36883688

toc.md

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
# Part I: Requirements, Design, and Reuse
2+
3+
# Course Introduction
4+
5+
## Introduction
6+
7+
## A Note from the Author
8+
9+
## Motivation
10+
11+
### Motivation: Why Is It Important to Secure Software?
12+
13+
### Motivation: Why Take This course?
14+
15+
# Security Basics
16+
17+
## What Do We Need?
18+
19+
### What Does “Security” Mean?
20+
21+
### Security Requirements
22+
23+
### What Is Privacy and Why It Is Important
24+
25+
### Privacy Requirements
26+
27+
## How Can We Get There?
28+
29+
### Risk Management
30+
31+
### Development Processes / Defense-in-Breadth
32+
33+
### Protect, Detect, Respond
34+
35+
### Vulnerabilities
36+
37+
# Design
38+
39+
## Secure Design Basics
40+
41+
### What Are Security Design Principles?
42+
43+
### Widely-Recommended Secure Design Principles
44+
45+
### Least Privilege
46+
47+
### Complete Mediation (Non-Bypassability)
48+
49+
### The Rest of the Saltzer & Schroeder Design Principles
50+
51+
### Other Design Principles
52+
53+
# Reusing External Software
54+
55+
## Supply Chain
56+
57+
### Basics of Reusing Software
58+
59+
### Selecting (Evaluating) Open Source Software
60+
61+
### Downloading and Installing Reusable Software
62+
63+
### Updating Reused Software
64+
65+
# Part II: Implementation
66+
67+
# Basics of Implementation
68+
69+
### Implementation Overview
70+
71+
# Input Validation
72+
73+
## Input Validation Basics
74+
75+
### Input Validation Basics Introduction
76+
77+
### How Do You Validate Input?
78+
79+
## Input Validation: Numbers and Text
80+
81+
### Input Validation: A Few Simple Data Types
82+
83+
### Sidequest: Text, Unicode, and Locales
84+
85+
### Validating Text
86+
87+
### Introduction to Regular Expressions
88+
89+
### Using Regular Expressions for Text Input Validation
90+
91+
### Countering ReDoS Attacks on Regular Expressions
92+
93+
## Input Validation: Beyond Numbers and Text
94+
95+
### Insecure Deserialization
96+
97+
### Input Data Structures (XML, HTML, CSV, JSON, & File Uploads)
98+
99+
### Minimizing Attack Surface, Identification, Authentication, and Authorization
100+
101+
### Search Paths and Environment Variables (including setuid/setgid Programs)
102+
103+
### Special Inputs: Secure Defaults and Secure Startup
104+
105+
## Consider Availability on All Inputs
106+
107+
### Consider Availability on All Inputs Introduction
108+
109+
# Processing Data Securely
110+
111+
## Processing Data Securely: General Issues
112+
113+
### Prefer Trusted Data. Treat Untrusted Data as Dangerous
114+
115+
### Avoid Default & Hardcoded Credentials
116+
117+
### Avoid Incorrect Conversion or Cast
118+
119+
## Processing Data Securely: Undefined Behavior / Memory Safety
120+
121+
### Countering Out-of-Bounds Reads and Writes (Buffer Overflow)
122+
123+
### Double-free, Use-after-free, and Missing Release
124+
125+
### Avoid Undefined Behavior
126+
127+
## Processing Data Securely: Calculate Correctly
128+
129+
### Avoid Integer Overflow, Wraparound, and Underflow
130+
131+
# Calling Other Programs
132+
133+
## Introduction to Securely Calling Programs
134+
135+
### Introduction to Securely Calling Programs - The Basics
136+
137+
## Calling Other Programs: Injection and Filenames
138+
139+
### SQL Injection
140+
141+
### OS Command (Shell) injection
142+
143+
### Other Injection Attacks
144+
145+
### Filenames (Including Path Traversal and Link Following)
146+
147+
## Calling Other Programs: Other Issues
148+
149+
### Call APIs for Programs and Check What Is Returned
150+
151+
### Handling Errors
152+
153+
### Logging
154+
155+
### Debug and Assertion Code
156+
157+
### Countering Denial-of-Service (DoS) Attacks
158+
159+
# Sending Output
160+
161+
### Introduction to Sending Output
162+
163+
### Countering Cross-Site Scripting (XSS)
164+
165+
### Content Security Policy (CSP)
166+
167+
### Other HTTP Hardening Headers
168+
169+
### Cookies & Login Sessions
170+
171+
### CSRF / XSRF
172+
173+
### Open Redirects and Forwards
174+
175+
### HTML **target** and JavaScript **window.open()**
176+
177+
### Using Inadequately Checked URLs / Server-Side Request Forgery (SSRF)
178+
179+
### Same-Origin Policy and Cross-Origin Resource Sharing (CORS)
180+
181+
### Format Strings and Templates
182+
183+
### Minimize Feedback / Information Exposure
184+
185+
### Side-Channel Attacks
186+
187+
# Part III: Verification and More Specialized Topics
188+
189+
# Verification
190+
191+
## Basics of Verification
192+
193+
### Verification Overview
194+
195+
## Static Analysis
196+
197+
### Static Analysis Overview
198+
199+
### Software Composition Analysis (SCA)/Dependency Analysis
200+
201+
## Dynamic Analysis
202+
203+
### Dynamic Analysis Overview
204+
205+
### Fuzz Testing
206+
207+
### Web Application Scanners
208+
209+
## Other Verification Topics
210+
211+
### Combining Verification Approaches
212+
213+
# Threat Modeling
214+
215+
## Threat Modeling/Attack Modeling
216+
217+
### Introduction to Threat Modeling
218+
219+
### STRIDE
220+
221+
# Cryptography
222+
223+
## Applying Cryptography
224+
225+
### Introduction to Cryptography
226+
227+
### Symmetric/Shared Key Encryption Algorithms
228+
229+
### Cryptographic Hashes (Digital Fingerprints)
230+
231+
### Public-Key (Asymmetric) Cryptography
232+
233+
### Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
234+
235+
### Storing Passwords
236+
237+
### Transport Layer Security (TLS)
238+
239+
### Other Topics in Cryptography
240+
241+
# Other Topics
242+
243+
## Vulnerability Disclosures
244+
245+
### Receiving Vulnerability Reports
246+
247+
### Respond To and Fix the Vulnerability in a Timely Way
248+
249+
### Sending Vulnerability Reports to Others
250+
251+
## Miscellaneous
252+
253+
### Assurance Cases
254+
255+
### Harden the Development Environment (Including Build and CI/CD Pipeline) & Distribution Environment
256+
257+
### Distributing, Fielding/Deploying, Operations, and Disposal
258+
259+
### Artificial Intelligence (AI), Machine Learning (ML), and Security
260+
261+
### Formal Methods
262+
263+
## Top Vulnerability Lists
264+
265+
### OWASP Top 10
266+
267+
### CWE Top 25
268+
269+
## Concluding Notes
270+
271+
### Conclusions
272+
273+
# Part IV: Supporting Materials Not Part of the Course
274+
275+
# Glossary
276+
277+
# Further Reading
278+
279+
# Old Mappings
280+
281+
## OWASP Top 10 and CWE Top 25
282+
283+
### OWASP Top 10 (2017 edition)
284+
285+
### CWE Top 25 (2019 edition)
286+
287+
# References
288+

0 commit comments

Comments
 (0)