Skip to content

Commit 8bdf86a

Browse files
Merge pull request ossf#96 from ossf/headings
Clean up heading text
2 parents 3822562 + 417d5f3 commit 8bdf86a

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

.github/linters/.markdown-lint.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ default: true
33
MD013: false # MD013/line-length
44
MD025: false # MD025/single-title/single-h1
55
MD028: false # MD028/no-blanks-blockquote
6-
MD036: false # MD036/no-emphasis-as-heading
76
MD033: false # MD033/no-inline-html
7+
MD036: false # MD036/no-emphasis-as-heading
8+
MD038: false # MD038/no-space-in-code Spaces inside code span elements
89
MD049: false # MD049/emphasis-style
910
MD012: false # MD012/no-multiple-blank
1011
MD024: false # MD024/no-duplicate-heading/no-duplicate-header

secure_software_development_fundamentals.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ Choose the material that will provide you with the information you want to learn
172172

173173
With that, let’s begin.
174174

175-
# 1. Security Basics
175+
# Security Basics
176176

177177
This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management.
178178

@@ -756,7 +756,7 @@ Identifying common kinds of vulnerabilities has another advantage, too: It will
756756

757757
(x) Avoiding common kinds of vulnerabilities is not enough by itself to make software secure, but it can be a significant help.
758758

759-
# 2. Design
759+
# Design
760760

761761
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.
762762

@@ -1100,7 +1100,7 @@ A good example of this is the Content Security Policy (CSP) supported by modern
11001100

11011101
[ ] Include control (including programs) with data, so that how to manipulate the data is easily provided with the code. {{ selected: That can be useful, but it is also dangerous from a security point of view. If an attacker manages to slip in “extra” information into data, this design can make it easy to cause a potentially-malicious program to be executed. Sometimes it is important to do this anyway, but it does create more complications when developing secure software. }}
11021102

1103-
# 3. Reusing External Software
1103+
# Reusing External Software
11041104

11051105
This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
11061106

@@ -1304,13 +1304,13 @@ This is false. Sure, there are risks when reusing software, but there are risks
13041304

13051305
[Explanation]
13061306

1307-
# Part I Final Exam
1307+
# Part I: Final Exam
13081308

13091309
* Not included as part of the free version of the course.
13101310

13111311
# Part II: Implementation
13121312

1313-
# 1. Basics of Implementation
1313+
# Basics of Implementation
13141314

13151315
### Implementation Overview
13161316

@@ -1939,7 +1939,7 @@ Note that if you force attackers to make many requests (e.g., via paging), the a
19391939

19401940
Rate limiting is not a complete solution, but it is an easy and inexpensive approach that increases the costs and efforts for attackers.
19411941

1942-
# 2. Processing Data Securely
1942+
# Processing Data Securely
19431943

19441944
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.
19451945

@@ -2295,7 +2295,7 @@ No. The range of possible values varies by language and types used, but attacker
22952295
[Explanation]
22962296

22972297

2298-
# 3. Calling Other Programs
2298+
# Calling Other Programs
22992299

23002300
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.
23012301

@@ -3063,7 +3063,7 @@ Make sure that you have backups of important datasets and a workable recovery pr
30633063

30643064
[ ] None of the above
30653065

3066-
# 4. Sending Output
3066+
# Sending Output
30673067

30683068
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.
30693069

@@ -3658,13 +3658,13 @@ If you need to counter these kinds of attacks, beyond what is required for crypt
36583658

36593659
Thankfully, other than attacks on cryptographic systems, side-channel attacks are less common today. Most developers need to focus on the other issues discussed in this course, and only then (in more specialized circumstances) do they need to worry about side-channel attacks. Attackers will typically not bother trying to implement a side-channel attack if the software is riddled with easier-to-find vulnerabilities such as XSS and buffer overflows.
36603660

3661-
# Part II Final Exam
3661+
# Part II: Final Exam
36623662

36633663
* Not included as part of the free version of the course.
36643664

36653665
# PART III: Verification and More Specialized Topics
36663666

3667-
# 1. Verification
3667+
# Verification
36683668

36693669
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.
36703670

@@ -4077,7 +4077,7 @@ If you are using OSS, consider preferring OSS who have earned a badge. If you ar
40774077

40784078
[ ] None of the above
40794079

4080-
# 2. Threat Modeling
4080+
# Threat Modeling
40814081

40824082
This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
40834083

@@ -4185,7 +4185,7 @@ Threat modeling may be overkill if you do not have significant security threats,
41854185

41864186
[ ] The point of STRIDE is to examine each design element to see if there as a threat of information disclosure or tampering with data. {{ selected: No, that is only part of the story. Yes, you should consider information disclosure (violating confidentiality) and tampering with data (violating integrity). But those are just the “I” and “T” of STRIDE. You should also consider spoofing of identity, repudiation, denial of service, and elevation of privilege. }}
41874187

4188-
# 3. Cryptography
4188+
# Cryptography
41894189

41904190
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).
41914191

@@ -4605,7 +4605,7 @@ Similarly, seek advice from experts, and weigh that advice carefully. Errors in
46054605

46064606
[ ] If powerful “general-purpose” quantum computers are developed, they will render all encryption algorithms useless. {{ selected: No. Such computers will render useless common *public-key* algorithms that are popular in 2020. However, while they will halve the effective bit length of symmetric encryption algorithms, they will not render them useless; a 256-bit key for a symmetric encryption algorithm will effectively become a 128-bit key, which is still adequately secure for most purposes. In addition, new public-key algorithms are being developed that resist attacks from such quantum computers. }}
46074607

4608-
# 4. Other Topics
4608+
# Other Topics
46094609

46104610
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.
46114611

@@ -5568,7 +5568,7 @@ As you develop your software:
55685568

55695569
In real life security is a process - a journey - and not a simple endpoint. We hope that this course has made you far more prepared to take this journey. We wish you the best as you develop software that will help protect people’s reputation, property, and even lives.
55705570

5571-
# Part III Final Exam
5571+
# Part III: Final Exam
55725572

55735573
* Not included as part of the free version of the course.
55745574

0 commit comments

Comments
 (0)