Logistics
The exam will be in class on paper. You will have one hour, from 7:30-8:30 pm on Monday, March 30, 2026.
The exam is closed-people, closed-book, closed-computer, closed-everything-except-2-pages-of-cheatsheet-notes.
How to Study
You should:
- Review the course learning objectives from the syllabus
- Review the course notes on the topics we have covered so far
- Do plenty of practice problems!
- Browse the suggested self-study resources below
Course Notes Review
Review the course notes if you can, but to help you a little, here’s an outline of the topics we covered:
- INTRODUCTION TO COMPUTER AND SOFTWARE SECURITY
- INTRO TO COMPUTER SECURITY
- Different types of security and their definitions
- Correctness vs security
- Assets
- Threats
- Philosophical questions about security
- Pillars of security strategy: protection, detection, reaction
- Security mindset: every input is a potential threat
- Attacks
- What they can do: eavesdrop, spoof, deny service, break in
- What they compromise: Confidentiality, Integrity, Availability (CIA)
- What happened at the Öst-Götha Bank in 1854
- Security at all levels: hardware, OS, network, application, human
- Security architecture vs. Secure software
- Vocab: defect, vulnerability, exploit, threat, risk, failure
- INTRO TO SOFTWARE SECURITY
- Computer security (cybersecurity) vs Software security
- Percentage of security incidents due to bad software: 90%
- Security at all phases of the SDLC
- Different means of attacks
- Low-level memory attacks (e.g., C)
- Web and network security
- "BUILD SECURITY IN"
- So you can cover everything (whitebox)
- To avoid ad-hoc security feature checking
- To catch errors at domain objects (that's the best)
- User Ids are not strings
- Quantities are not integers
- Why do we not take security out of software development?
- If delayed, might not ever happen, and you will get destroyed
- If delayed, pentesters will show you why your project is bad and should not be deployed
- How to define security requirements (and how NOT to!)
- Defense in depth
- Defense in breadth
- Principles
- Set Trust Boundaries
- Design for Least Privilege
- Maintain Integrity
- Fail Fast
- Audit
- Don’t Rely on Secrets
- Keep It Simple
- Prevent Leaks
- Tactics
- We named, but did not describe, several dozen of these
- Various Software Security Guidelines and Standards
- Links to software security resources
- PROGRAMMING LANGUAGE BASICS
- C BASICS
- Hello world
- Types
- Numbers, booleans
- Structs
- Pointers
- Arrays (NOT bounds checked!!)
- printf
- format string can be hacked
- Functions
- Memory layout
- Static storage, stack, heap
- Pointers to stack storage (be careful)
- malloc() for pointers to the heap
- free()
- Memory Leaks
- Dangling Pointers
- Structs are copied
- Arrays
- Arrays are passed as pointers
- Frames passed on stack so return address can be overwritten in buffer overflow
- Strings (char*)
- Also not bounds checked
- strlen is linear time
- strcpy/strcat vs strncpy/strncat
- C++ BASICS
- References
- Raw Pointers
- Structs and Classes
- Constructors
- Fields
- Methods
- Smart Pointers
- Standard Library Containers and Algorithms
- JAVASCRIPT BASICS
- Browser-based vs Server-based apps
- Types
- Primitives vs. References
- Null vs Undefined, Number vs BigInt
- Weakly typed
- Objects, identity, shallow vs deep copy
- Destructuring
- Prototypes
- Arrays
- First Class Functions!
- This, methods, and arrow functions
- Class Syntax
- Just a surface syntax
- Basics
- Private and static properties
- Optional Chaining and Coalescing
- Promises
- JAVA BASICS
- Only classes at the top-level
- Types
- Primitives vs. References
- Reference types: Class, array, record, interface, enum
- Assignment and equality require care for reference types
- Billion Dollar Mistake
- Strings (UTF-16 oh no!)
- Arrays (weird, covariant) vs lists (invariant)
- Interfaces
- Records
- Optionals
- Streams
- LANGUAGE-SPECIFIC SECURITY
- SECURE C
- SECURE C++
- SECURE JAVA
- SECURE JAVASCRIPT
Practice
Make sure to do the recall questions at the bottom of the course notes.
Tips
There will be questions on CIA, Immutability, C specifics, JavaScript specifics, Java specifics, C++ specifics, Heartbleed, Billion Laughs, terminology, buffer overflowing, freezing, and secure classes, among other topics.
Other Study Resources
Keep in mind that our (world’s) knowledge culture is far more literary than oral, so read, or reread, or watch the presentations and the online guides mentioned near the end of the course notes on Software Security.