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
Copy file name to clipboardExpand all lines: secure_software_development_fundamentals.md
+14-11Lines changed: 14 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,7 +176,7 @@ 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.
179
+
> 🎥 This chapter provides a high-level overview about security concepts, 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. It's hard to implement security and privacy if we don't know what they are, and we must have a basic idea of what the software needs to do before we can implement it. In addition, we should take reasonable steps to *manage* risks so that any risks taken are acceptable.
180
180
181
181
Learning Objectives:
182
182
@@ -760,7 +760,8 @@ Identifying common kinds of vulnerabilities has another advantage, too: It will
760
760
761
761
# Design
762
762
763
-
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.
763
+
764
+
> 🎥 Non-trivial software needs to broken into smaller components that work together, and that breakdown is often called design or architectural design. 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.
764
765
765
766
Learning objectives:
766
767
@@ -1104,7 +1105,9 @@ A good example of this is the Content Security Policy (CSP) supported by modern
1104
1105
1105
1106
# Reusing External Software
1106
1107
1107
-
This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1108
+
<!-- Have CRob do this intro? -->
1109
+
1110
+
> 🎥 When developing software today we typically don't develop everything from scratch, we typically reuse a lot of existing software. In fact, on average, software products are mostly reused software. This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software. Reusing more secure software generally produces more secure results.
1108
1111
1109
1112
Learning objectives:
1110
1113
@@ -1338,7 +1341,7 @@ Practically all programs have to accept input. So we will begin examining how to
1338
1341
1339
1342
# Input Validation
1340
1343
1341
-
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.
1344
+
> 🎥 A key part of implementing secure software is to only accept 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. Limiting input won't counter every attack, but it will tend to make the software harder to attack.
1342
1345
1343
1346
Learning objectives:
1344
1347
@@ -1950,7 +1953,7 @@ Rate limiting is not a complete solution, but it is an easy and inexpensive appr
1950
1953
1951
1954
# Processing Data Securely
1952
1955
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.
1956
+
> 🎥 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
1957
1955
1958
Learning objectives:
1956
1959
@@ -2306,7 +2309,7 @@ No. The range of possible values varies by language and types used, but attacker
2306
2309
2307
2310
# Calling Other Programs
2308
2311
2309
-
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.
2312
+
> 🎥 Real-world programs often call out to other programs. On a server-side application these programs might include the operating system or a database. On a client-side application this might include the supporting browser. This chapter describes how to call other programs securely. We'll discuss in particular on how to counter injection attacks, including SQL injection and OS command injection, as well as how to properly handle filenames and pathnames.
2310
2313
2311
2314
Learning objectives:
2312
2315
@@ -3085,7 +3088,7 @@ Make sure that you have backups of important datasets and a workable recovery pr
3085
3088
3086
3089
# Sending Output
3087
3090
3088
-
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.
3091
+
> 🎥 This chapter describes how to send output securely. This includes how to counter cross-site scripting (XSS) attacks, how to use HTTP hardening headers, and how to securely use formatting systems.
3089
3092
3090
3093
Learning objectives:
3091
3094
@@ -3694,7 +3697,7 @@ Thankfully, other than attacks on cryptographic systems, side-channel attacks ar
3694
3697
3695
3698
# Verification
3696
3699
3697
-
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 securitycode scanners/static application security testing (SAST) tools, fuzzers, and web application scanners.
3700
+
> 🎥 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 that can help improve security. These tool types include security code scanners aka static application security testing (SAST) tools, fuzzers, and web application scanners.
3698
3701
3699
3702
Learning objectives:
3700
3703
@@ -4107,7 +4110,7 @@ If you are using OSS, consider preferring OSS who have earned a badge. If you ar
4107
4110
4108
4111
# Threat Modeling
4109
4112
4110
-
This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4113
+
> 🎥 This chapter describes the basics of threat modeling, along with a specific threat modeling approach called STRIDE. The point of threat modeling is to try to *think like an attacker* when considering your software, including looking for threats and proactively countering them.
4111
4114
4112
4115
Learning objectives:
4113
4116
@@ -4215,7 +4218,7 @@ Threat modeling may be overkill if you do not have significant security threats,
4215
4218
4216
4219
# Cryptography
4217
4220
4218
-
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).
4221
+
> 🎥 This chapter describes the basics of how to use cryptography to help develop secure software. Developing secure software involves a lot more than cryptography, but many secure systems depend vitally on cryptography, so to have secure systems we often need to know how to correctly use cryptography. We will cover 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).
4219
4222
4220
4223
Learning objectives:
4221
4224
@@ -4640,7 +4643,7 @@ Similarly, seek advice from experts, and weigh that advice carefully. Errors in
4640
4643
4641
4644
# Other Topics
4642
4645
4643
-
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.
4646
+
> 🎥 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