Skip to content

Commit 18589b8

Browse files
Merge pull request #147 from ossf/images_dir
Move images into images/ directory. Fixes #141
2 parents 6a215a4 + 172a86c commit 18589b8

17 files changed

+705
-16
lines changed

.github/linters/.markdown-lint.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ MD049: false # MD049/emphasis-style
1010
MD012: false # MD012/no-multiple-blank
1111
MD001: false # MD001/heading-increment/header-increment
1212

13+
# For the moment, disable
14+
MD024: false # MD024/no-duplicate-heading/no-duplicate-header
15+
1316
# We enforce "no duplicate headers" so hypertext links to sections will have
1417
# unique anchor names to refer to.
1518
# MD024: false # MD024/no-duplicate-heading/no-duplicate-header
File renamed without changes.

cia.png renamed to images/cia.png

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

secure_software_development_fundamentals.md

Lines changed: 398 additions & 16 deletions
Large diffs are not rendered by default.

toc.md

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

3307
# Course Introduction

0 commit comments

Comments
 (0)