You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This creates simple text to introduce major sections with
short video clips. I intend for one to be done by CRob.
One feedback item we got was that many people wanted a little
more media (video) to break the monotony. The problem is that
creating videos takes a lot of time, and more importantly, makes
editing the material hard. We might be able to resolve
that with AI, but that's a separate discussion. The proposed
solution is to have short video clips that introduce
chapters - they are unlikely to need updating, yet they'll help
break up the material.
Signed-off-by: David A. Wheeler <[email protected]>
Copy file name to clipboardExpand all lines: secure_software_development_fundamentals.md
+23-1Lines changed: 23 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,6 +176,8 @@ With that, let’s begin.
176
176
177
177
# Security Basics
178
178
179
+
> 🎥 This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management. We need to know these security basics so we can understand how to develop software that supports these basics.
180
+
179
181
This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management.
180
182
181
183
Learning Objectives:
@@ -760,6 +762,8 @@ Identifying common kinds of vulnerabilities has another advantage, too: It will
760
762
761
763
# Design
762
764
765
+
> 🎥 This chapter describes how to design software to be secure, focusing on key secure design principles such as least privilege, complete mediation, and input validation. These principles will help you avoid common problems and make your software harder to attack.
766
+
763
767
This chapter describes how to design software to be secure, focusing on key secure design principles such as least privilege, complete mediation, and input validation.
764
768
765
769
Learning objectives:
@@ -1104,6 +1108,8 @@ A good example of this is the Content Security Policy (CSP) supported by modern
1104
1108
1105
1109
# Reusing External Software
1106
1110
1111
+
> 🎥 Hi, I'm CRob. I work at Intel corporation and lead the Open Source Security Foundation Best Practices Working Group. When developing software today we typically don't develop everything from scratch, but instead we typically reuse a lot of existing software. This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1112
+
1107
1113
This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1108
1114
1109
1115
Learning objectives:
@@ -1338,6 +1344,8 @@ Practically all programs have to accept input. So we will begin examining how to
1338
1344
1339
1345
# Input Validation
1340
1346
1347
+
> 🎥 The first step in developing secure software is to only input that should be accepted. This chapter describes how to validate input, including how to validate numbers and text, the importance of minimizing attack surfaces, and how to improve availability by considering the inputs.
1348
+
1341
1349
This chapter describes how to validate input, including how to validate numbers and text, the importance of minimizing attack surfaces, and how to improve availability by considering the inputs.
1342
1350
1343
1351
Learning objectives:
@@ -1950,7 +1958,9 @@ Rate limiting is not a complete solution, but it is an easy and inexpensive appr
1950
1958
1951
1959
# Processing Data Securely
1952
1960
1953
-
This chapter describes how to process data within software with security in mind, including treating untrusted data as dangerous, avoiding default and hardcoded credentials, avoiding memory safety issues (such as buffer overflows), and avoiding undefined behavior.
1961
+
> 🎥 This chapter describes how to process data with security in mind, including treating untrusted data as dangerous, avoiding default and hardcoded credentials, avoiding memory safety issues (such as buffer overflows), and avoiding undefined behavior.
1962
+
1963
+
This chapter describes how to process data with security in mind, including treating untrusted data as dangerous, avoiding default and hardcoded credentials, avoiding memory safety issues (such as buffer overflows), and avoiding undefined behavior.
1954
1964
1955
1965
Learning objectives:
1956
1966
@@ -2306,6 +2316,8 @@ No. The range of possible values varies by language and types used, but attacker
2306
2316
2307
2317
# Calling Other Programs
2308
2318
2319
+
> 🎥 Real-world programs often call out to other programs, such as the operating system, database, and supporting browser. This chapter describes how to call other programs securely, including how to counter injection attacks (including SQL injection and OS command injection) and how to properly handle filenames/pathnames.
2320
+
2309
2321
This chapter describes how to call other programs securely, including how to counter injection attacks (including SQL injection and OS command injection) and how to properly handle filenames/pathnames.
2310
2322
2311
2323
Learning objectives:
@@ -3085,6 +3097,8 @@ Make sure that you have backups of important datasets and a workable recovery pr
3085
3097
3086
3098
# Sending Output
3087
3099
3100
+
> 🎥 This chapter describes how to send output securely, including how to counter cross-site scripting (XSS) attacks, using HTTP hardening headers, and securely using formatting systems.
3101
+
3088
3102
This chapter describes how to send output securely, including how to counter cross-site scripting (XSS) attacks, using HTTP hardening headers, and securely using formatting systems.
3089
3103
3090
3104
Learning objectives:
@@ -3686,6 +3700,8 @@ Thankfully, other than attacks on cryptographic systems, side-channel attacks ar
3686
3700
3687
3701
# Verification
3688
3702
3703
+
> 🎥 This chapter describes how to verify for security, including the limitations of tools, the meaning of *static analysis* and *dynamic analysis*, and common types of tools such as security code scanners/static application security testing (SAST) tools, fuzzers, and web application scanners.
3704
+
3689
3705
This chapter describes how to verify for security, including the limitations of tools, the meaning of *static analysis* and *dynamic analysis*, and common types of tools such as security code scanners/static application security testing (SAST) tools, fuzzers, and web application scanners.
3690
3706
3691
3707
Learning objectives:
@@ -4099,6 +4115,8 @@ If you are using OSS, consider preferring OSS who have earned a badge. If you ar
4099
4115
4100
4116
# Threat Modeling
4101
4117
4118
+
> 🎥 This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4119
+
4102
4120
This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4103
4121
4104
4122
Learning objectives:
@@ -4207,6 +4225,8 @@ Threat modeling may be overkill if you do not have significant security threats,
4207
4225
4208
4226
# Cryptography
4209
4227
4228
+
> 🎥 This chapter describes the basics of how to use cryptography to help develop secure software, including the basics of symmetric/shared key encryption algorithms, cryptographic hashes, public-key (asymmetric) encryption, how to securely store passwords, cryptographically secure pseudo-random number generators (CSPRNG), and Transport Layer Security (TLS).
4229
+
4210
4230
This chapter describes the basics of how to use cryptography to help develop secure software, including the basics of symmetric/shared key encryption algorithms, cryptographic hashes, public-key (asymmetric) encryption, how to securely store passwords, cryptographically secure pseudo-random number generators (CSPRNG), and Transport Layer Security (TLS).
4211
4231
4212
4232
Learning objectives:
@@ -4630,6 +4650,8 @@ Similarly, seek advice from experts, and weigh that advice carefully. Errors in
4630
4650
4631
4651
# Other Topics
4632
4652
4653
+
> 🎥 This chapter describes topics on the fundamentals of developing secure software that have not been covered elsewhere, including handling vulnerability disclosures, assurance cases, the basics after development, formal methods, and top vulnerability lists.
4654
+
4633
4655
This chapter describes topics on the fundamentals of developing secure software that have not been covered elsewhere, including handling vulnerability disclosures, assurance cases, the basics after development, formal methods, and top vulnerability lists.
0 commit comments