Simple Secure Coding Checklist

 

The following checklist identifies basic security issues that should be checked at every patch check-in. This checklist represents first-line security control against vulnerable code making it to production. This is considered a starting point and the community is encouraged to get involved to improve this list.

Scenarios where this checklist could be used:

a. Review another developer's patch against secure coding best practices.

b. Review own patch against secure coding best practices.

c. Retroactively review a code module against secure coding best practices.

Secure Coding Checklist:

1- Contextual encoding is applied:

Ensure that all dynamic data is properly encoded to prevent cross-site scripting attacks.

Code Review Tasks:

    • Ensure that encoding is properly done using the correct context.
    • Ensure that data is properly quoted using double quotes.

2- Sanitize user data:

Ensures that user-supplied data is properly sanitized to prevent cross-site scripting and injection attacks.

Code Review Tasks:

    • Ensure that data retrieved from the QueryString, Header, Post Parameters, and Cookies is properly sanitized using a whitelist.

3- Use parameterized SQL statements:

Ensures that SQL statements are securely constructed to prevent SQL injection attacks.

Code Review Tasks:

    • Ensure that all SQL statements in the patch are parameterized, both for user-supplied data and for data loaded from other sources (e.g. database, files, etc)

4- File Upload/Download:

Ensures that proper procedures have been followed to prevent path manipulation attacks and unauthorized attempts to access the file system.

Code Review Tasks:

    • Restrict accepted file types to avoid dangerous extensions like .bat or .exe
    • It is preferable to use system generated filenames if files are to be saved locally. 
    • If this is not possible, then make sure to validate the file name using a whitelist, make sure to retrieve the file name only, useful routines to use is File.getName()
    • Validate the file size to avoid denial of service attacks.
    • Upon file download operations; ensure that the path can't be controlled by the user.

5- Forms should be protected with a token:

Ensures that proper procedures have been followed to prevent cross-site request forgery (CSRF) attacks.

Code Review Tasks:

    • Actionable requests must be protected using an anti-CSRF token. Actionable requests are requests which will result in data update, delete, insert, etc.

6- Check authentication status if appropriate:

Ensures that proper checks have been made to prevent insufficient authentication attacks.

Code Review Tasks:

    • For all the files in the patch. Ensure that authentication status is checked.

7- Check authorization status if appropriate:

Ensures that proper checks have been made to prevent unauthorized data access.

Code Review Tasks:

    • For all the files in the patch. Ensure that code exists to check the role of the current user if appropriate.

8- The patch does not perform a redirect based on user-controllable data:

Ensures that proper checks have been made to prevent open-redirects and HTTP splitting attacks.

Code Review Tasks:

    • Ensure that the code does not perform redirect or forward operation using data retrieved from the request.

9- The patch does not disable any security configuration accidentally:

Ensures that proper controls are in place to prevent against insecure configuration issues.

Code Review Tasks:

    • Ensure that no configurations have been turned off accidentally.