This document outlines 10 common software security flaws and provides guidance on how to avoid each one. The top 10 flaws are: 1) assuming trust without earning it, 2) using authentication mechanisms that can be bypassed, 3) authorizing without authenticating, 4) mixing data and control instructions from untrusted sources, 5) failing to validate all data, 6) misusing cryptography, 7) not identifying and protecting sensitive data, 8) not considering how users will interact with the software, 9) not understanding how external components impact the attack surface, and 10) not planning for future changes. For each flaw, the document provides 3 tips or guidelines for avoiding that type of issue in software design and development.