@@ -184,7 +184,7 @@ Dr. David A. Wheeler is an expert in developing secure software and in open sour
184
184
185
185
# Table of contents
186
186
187
- [[TOC]]
187
+ {:toc}
188
188
189
189
# Part I: Requirements, Design, and Reuse
190
190
@@ -6723,294 +6723,3 @@ The LF education team needs:
6723
6723
3. final exam for each of the 3 courses: 15 questions, preferably multiple choice, different than the ones in the end of chapter quizzes.
6724
6724
6725
6725
Items 2 and 3 are covered in a separate file, to protect their confidentiality.
6726
-
6727
- # Part I: Requirements, Design, and Reuse
6728
-
6729
- # Course Introduction
6730
-
6731
- ## Introduction
6732
-
6733
- ## A Note from the Author
6734
-
6735
- ## Motivation
6736
-
6737
- ### Motivation: Why Is It Important to Secure Software?
6738
-
6739
- ### Motivation: Why Take This course?
6740
-
6741
- # Security Basics
6742
-
6743
- ## What Do We Need?
6744
-
6745
- ### What Does “Security” Mean?
6746
-
6747
- ### Security Requirements
6748
-
6749
- ### What Is Privacy and Why It Is Important
6750
-
6751
- ### Privacy Requirements
6752
-
6753
- ## How Can We Get There?
6754
-
6755
- ### Risk Management
6756
-
6757
- ### Development Processes / Defense-in-Breadth
6758
-
6759
- ### Protect, Detect, Respond
6760
-
6761
- ### Vulnerabilities
6762
-
6763
- # Design
6764
-
6765
- ## Secure Design Basics
6766
-
6767
- ### What Are Security Design Principles?
6768
-
6769
- ### Widely-Recommended Secure Design Principles
6770
-
6771
- ### Least Privilege
6772
-
6773
- ### Complete Mediation (Non-Bypassability)
6774
-
6775
- ### The Rest of the Saltzer & Schroeder Design Principles
6776
-
6777
- ### Other Design Principles
6778
-
6779
- # Reusing External Software
6780
-
6781
- ## Supply Chain
6782
-
6783
- ### Basics of Reusing Software
6784
-
6785
- ### Selecting (Evaluating) Open Source Software
6786
-
6787
- ### Downloading and Installing Reusable Software
6788
-
6789
- ### Updating Reused Software
6790
-
6791
- # Part II: Implementation
6792
-
6793
- # Basics of Implementation
6794
-
6795
- ### Implementation Overview
6796
-
6797
- # Input Validation
6798
-
6799
- ## Input Validation Basics
6800
-
6801
- ### Input Validation Basics Introduction
6802
-
6803
- ### How Do You Validate Input?
6804
-
6805
- ## Input Validation: Numbers and Text
6806
-
6807
- ### Input Validation: A Few Simple Data Types
6808
-
6809
- ### Sidequest: Text, Unicode, and Locales
6810
-
6811
- ### Validating Text
6812
-
6813
- ### Introduction to Regular Expressions
6814
-
6815
- ### Using Regular Expressions for Text Input Validation
6816
-
6817
- ### Countering ReDoS Attacks on Regular Expressions
6818
-
6819
- ## Input Validation: Beyond Numbers and Text
6820
-
6821
- ### Insecure Deserialization
6822
-
6823
- ### Input Data Structures (XML, HTML, CSV, JSON, & File Uploads)
6824
-
6825
- ### Minimizing Attack Surface, Identification, Authentication, and Authorization
6826
-
6827
- ### Search Paths and Environment Variables (including setuid/setgid Programs)
6828
-
6829
- ### Special Inputs: Secure Defaults and Secure Startup
6830
-
6831
- ## Consider Availability on All Inputs
6832
-
6833
- ### Consider Availability on All Inputs Introduction
6834
-
6835
- # Processing Data Securely
6836
-
6837
- ## Processing Data Securely: General Issues
6838
-
6839
- ### Prefer Trusted Data. Treat Untrusted Data as Dangerous
6840
-
6841
- ### Avoid Default & Hardcoded Credentials
6842
-
6843
- ### Avoid Incorrect Conversion or Cast
6844
-
6845
- ## Processing Data Securely: Undefined Behavior / Memory Safety
6846
-
6847
- ### Countering Out-of-Bounds Reads and Writes (Buffer Overflow)
6848
-
6849
- ### Double-free, Use-after-free, and Missing Release
6850
-
6851
- ### Avoid Undefined Behavior
6852
-
6853
- ## Processing Data Securely: Calculate Correctly
6854
-
6855
- ### Avoid Integer Overflow, Wraparound, and Underflow
6856
-
6857
- # Calling Other Programs
6858
-
6859
- ## Introduction to Securely Calling Programs
6860
-
6861
- ### Introduction to Securely Calling Programs - The Basics
6862
-
6863
- ## Calling Other Programs: Injection and Filenames
6864
-
6865
- ### SQL Injection
6866
-
6867
- ### OS Command (Shell) injection
6868
-
6869
- ### Other Injection Attacks
6870
-
6871
- ### Filenames (Including Path Traversal and Link Following)
6872
-
6873
- ## Calling Other Programs: Other Issues
6874
-
6875
- ### Call APIs for Programs and Check What Is Returned
6876
-
6877
- ### Handling Errors
6878
-
6879
- ### Logging
6880
-
6881
- ### Debug and Assertion Code
6882
-
6883
- ### Countering Denial-of-Service (DoS) Attacks
6884
-
6885
- # Sending Output
6886
-
6887
- ### Introduction to Sending Output
6888
-
6889
- ### Countering Cross-Site Scripting (XSS)
6890
-
6891
- ### Content Security Policy (CSP)
6892
-
6893
- ### Other HTTP Hardening Headers
6894
-
6895
- ### Cookies & Login Sessions
6896
-
6897
- ### CSRF / XSRF
6898
-
6899
- ### Open Redirects and Forwards
6900
-
6901
- ### HTML **target** and JavaScript **window.open()**
6902
-
6903
- ### Using Inadequately Checked URLs / Server-Side Request Forgery (SSRF)
6904
-
6905
- ### Same-Origin Policy and Cross-Origin Resource Sharing (CORS)
6906
-
6907
- ### Format Strings and Templates
6908
-
6909
- ### Minimize Feedback / Information Exposure
6910
-
6911
- ### Avoid caching sensitive information
6912
-
6913
- ### Side-Channel Attacks
6914
-
6915
- # Part III: Verification and More Specialized Topics
6916
-
6917
- # Verification
6918
-
6919
- ## Basics of Verification
6920
-
6921
- ### Verification Overview
6922
-
6923
- ## Static Analysis
6924
-
6925
- ### Static Analysis Overview
6926
-
6927
- ### Software Composition Analysis (SCA)/Dependency Analysis
6928
-
6929
- ## Dynamic Analysis
6930
-
6931
- ### Dynamic Analysis Overview
6932
-
6933
- ### Fuzz Testing
6934
-
6935
- ### Web Application Scanners
6936
-
6937
- ## Other Verification Topics
6938
-
6939
- ### Combining Verification Approaches
6940
-
6941
- # Threat Modeling
6942
-
6943
- ## Threat Modeling/Attack Modeling
6944
-
6945
- ### Introduction to Threat Modeling
6946
-
6947
- ### STRIDE
6948
-
6949
- # Cryptography
6950
-
6951
- ## Applying Cryptography
6952
-
6953
- ### Introduction to Cryptography
6954
-
6955
- ### Symmetric/Shared Key Encryption Algorithms
6956
-
6957
- ### Cryptographic Hashes (Digital Fingerprints)
6958
-
6959
- ### Public-Key (Asymmetric) Cryptography
6960
-
6961
- ### Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
6962
-
6963
- ### Storing Passwords
6964
-
6965
- ### Transport Layer Security (TLS)
6966
-
6967
- ### Other Topics in Cryptography
6968
-
6969
- # Other Topics
6970
-
6971
- ## Vulnerability Disclosures
6972
-
6973
- ### Receiving Vulnerability Reports
6974
-
6975
- ### Respond To and Fix the Vulnerability in a Timely Way
6976
-
6977
- ### Sending Vulnerability Reports to Others
6978
-
6979
- ## Miscellaneous
6980
-
6981
- ### Assurance Cases
6982
-
6983
- ### Harden the Development Environment (Including Build and CI/CD Pipeline) & Distribution Environment
6984
-
6985
- ### Distributing, Fielding/Deploying, Operations, and Disposal
6986
-
6987
- ### Artificial Intelligence (AI), Machine Learning (ML), and Security
6988
-
6989
- ### Formal Methods
6990
-
6991
- ## Top Vulnerability Lists
6992
-
6993
- ### OWASP Top 10
6994
-
6995
- ### CWE Top 25
6996
-
6997
- ## Concluding Notes
6998
-
6999
- ### Conclusions
7000
-
7001
- # Part IV: Supporting Materials Not Part of the Course
7002
-
7003
- # Glossary
7004
-
7005
- # Further Reading
7006
-
7007
- # Old Mappings
7008
-
7009
- ## OWASP Top 10 and CWE Top 25
7010
-
7011
- ### OWASP Top 10 (2017 edition)
7012
-
7013
- ### CWE Top 25 (2019 edition)
7014
-
7015
- # References
7016
-
0 commit comments