Secure Software Architecture# 1. Software Vulnerabilities 1.1. Introduction 1.2. Security Principles 1.3. Benefits of Secure Software 1.4. Commercial Benefits of Secure Software 1.5. Impact on Society 2. Cryptography 2.1. Cryptography 2.2. Ciphers 2.3. Substitution Ciphers 2.4. Symmetric-key Cryptography 2.5. In Practice 2.6. Asymmetric-key Cryptography 2.7. Hashing 2.8. Cryptographic Hash Functions 3. Secure Communications 3.1. Authenticity 3.2. Digital Signatures 3.3. Digital Certificates 3.4. Certificate Authorities 3.5. Secure Communication and TLS 3.6. Extension: Secure Random Number Generation 4. Authentication and Authorisation on the Web 4.1. Introduction 4.2. Password Authentication 4.3. Passwords 4.4. Salting Passwords 4.5. Cookies 4.6. Cookies in Flask 4.7. Server-Side Sessions 4.8. Client-Side Sessions 4.9. Sessions in Flask 4.10. User and role access controls 4.11. Flask-Security Tutorial 5. Securing the Web 5.1. HTTPS 5.2. HTTPS and Flask 5.3. SQL Injection 5.4. Parameterised Queries 5.5. Cross-Site Scripting (XSS) 5.6. XSS and Flask Templates 5.7. Cross-Site Request Forgery (CSRF) 5.8. Flask-WTF 5.9. Race Conditions 6. Secure Software Design 6.1. Security and Privacy by Design 6.2. Secure Software Stages 6.3. FlixReviews 6.4. Requirements 6.5. Specifications 6.6. Design 6.7. Integration and Testing 6.8. Installation and Maintenance