This document provides an overview of defensive coding techniques. It discusses why defensive coding is important for reliability, resiliency and recoverability. It then describes various techniques for coding defensively, including identifying attack surfaces, validating input, canonicalizing data, securely type checking, vetting external libraries, maintaining cryptographic agility, managing exceptions, performing code reviews, and writing unit and behavioral tests. The document concludes by discussing community trends in security best practices and considerations for applying defensive coding.
Related topics: