However, according to MITRE and the SANS Institute, there are some 25 programming errors which can lead to serious software vulnerabilities. These are frequent in occurrence and are both easy to find and exploit.
It is these programming errors which make you a dangerous coder. Dangerous because they can allow attackers to completely control software, to steal data or just prevent the software from working in some way.
The 2009 CWE/SANS Top 25 Most Dangerous Programming Errors list comes after collaboration between both MITRE and SANS along with numerous software experts from the likes of Microsoft and Symantec in Europe and the US.
SANS has contributed via the Top 20 Attack Vectors development process, while MITRE kicks in with it's Common Weakness Enumeration project and the US Department of Homeland Security's National Cyber Security Division helps out with web hosting.
The aim of the list is to help you become a better coder by understanding your weaknesses, educating programmers how to spot and remove common mistakes before software is released.
So just what are the Top 25 Most Dangerous Programming Errors according to the CWE/SANS list? More on page 2.
For the full breakdown and detailed descriptions you need to head over to the CWE/SANS site itself, which is broken down into three main categories: Insecure Interaction Between Components, Risky Resource Management and Porous Defenses.
The Insecure Interaction Between Components section covers weaknesses related to the way data is sent and received, including:
Improper Input Validation, Improper Encoding or Escaping of Output, Failure to Preserve SQL Query Structure, Failure to Preserve Web Page Structure, Failure to Preserve OS Command Structure, Cleartext Transmission of Sensitive Information, Cross-Site Request Forgery, Race Condition and Error Message Information Leaks.
Risky Resource Management, meanwhile, covers errors relating to software not managing system resource creation, usage, transfer or destruction properly, including:
Failure to Constrain Operations within the Bounds of a Memory Buffer, External Control of Critical State Data, External Control of File Name or Path, Untrusted Search Path, Failure to Control Generation of Code, Download of Code Without Integrity Check, Improper Resource Shutdown or Release, Improper Initialization and Incorrect Calculation.
Finally, Porous Defenses deals with the misuse and abuse of defensive techniques such as:
Improper Access Control, Use of a Broken or Risky Cryptographic Algorithm, Hard-Coded Password, Insecure Permission Assignment for Critical Resource, Use of Insufficiently Random Values, Execution with Unnecessary Privileges, Client-Side Enforcement of Server-Side Security.