Checklist

Input Validation

  • Do not trust input, consider centralized input validation.
  • Do not rely on client-side validation.
  • Be careful with canonicalization issues.
  • Constrain, reject, and sanitize input. Validate for type, length, format, and range.

Authentication

  • Partition site by anonymous, identified, and authenticated area.
  • Use strong passwords.
  • Support password expiration periods and account disablement.
  • Do not store credentials (use one-way hashes with salt).
  • Encrypt communication channels to protect authentication tokens.
  • Pass forms authentication cookies only over HTTPS connections.
  • Use of ORM (SQLAlchemy for instance)

Authorization

  • Use least-privileged accounts.
  • Consider authorization granularity.
  • Enforce separation of privileges.
  • Restrict user access to system-level resources.
  • Use OAuth 2.0 protocol for Authentication and Authorization.
  • Carryout API Validation.
  • Whitelist allowable methods.
  • Protect privileged actions and sensitive resource collections.
  • Protect against Cross-site resource forgery (CSRF).

Session Management

  • Create a Session identifier on the server.
  • Terminate the session with the Logoff.
  • Generate a new session on re-authentication.
  • Set the ‘secure’ attribute for cookies transmitted over TLS.

Cryptography

  • Use cryptography while ‘Data in transit, Data in storage, Data in motion, Message Integrity’.
  • Do not develop your own. Use tried and tested platform features.
  • Keep unencrypted data close to the algorithm.
  • Use the right algorithm and key size.
  • Avoid key management (use DPAPI).
  • Cycle your keys periodically.
  • Store keys in a restricted location.

Logging and Auditing

  • Identify malicious behavior.
  • Know what good traffic looks like.
  • Audit and log activity through all of the application tiers.
  • Secure access to log files.
  • Back up and regularly analyze the log files.

Output Encoding

  • Carryout ‘Input Validation (XML, JSON….).
  • Use Parameterized query.
  • Carry out ‘Schema validation’.
  • Carry out Encoding (XML, JSON..).
  • Send Security Headers.

Misc

  • Journaling code events (logs)
  • Unit tests
  • ORM (like SQLAlchemy)
  • Documented functions (good names)
  • Versioning (like SVN)
  • Comments