Appendix: Project Checklist

Topic
Policy
☑️ recognize-policies.yaml is up-to-date with the correct versions of policy
General
☑️ Automation has been applied to make sure we don't have to manually execute repeating tasks
☑️ The quality of our software adheres to the Recognize quality guideline
☑️ Deviations from policy have been consulted with the Head of Development and consent has been given
Development
☑️ No unsafe dependencies are used within the project
☑️ Static Application Security Testing (SAST) is used to test application code or binaries for known security flaws
☑️ Automatic tooling is used to scan (external) dependencies
☑️ Validation happens on the side of the server, and client-side validation is used as a complement
Web
☑️ Web traffic is redirected from HTTP to HTTPS
☑️ The minimum TLS-version supported by the web server is 1.2
☑️ Only strong ciphers are supported by the web server
☑️ No version information is return in the headers of a response
☑️ No debugging information is returned to the user in any way on acceptance and production environments
☑️ The application uses CSRF-tokens when cookies are used for authentication
☑️ Only secure cookies are returned from the server
☑️ User data (including access tokens) is removed from the device when a user logs out
☑️ The Referrer-Policy-header has been set correctly
☑️ The Cache-Control-header has been set correctly
☑️ The X-Frame-Options-header has been set correctly
☑️ The Strict-Transport-Security-header has been set correctly
☑️ The X-Content-Type-Options-header has been set correctly
☑️ The X-XSS-Protection-header has been set correctly
☑️ The Permissions-Policy-header has been set correctly
☑️ The Content-Security-Policy-header has been set correctly
☑️ DNSSEC is enabled for application domains that support it.
☑️ The CORS-policy has been set correctly
Mobile
☑️ On iOS & Android, user data should be stored in a secure container
☑️ On iOS & Android, user data (including access tokens) is removed from the device when a user logs out
☑️ On iOS & Android, applications should only request permissions that are strictly required.
☑️ On Android, it should be considered whether the backup-flag should be set to false
☑️ On Android, intents that are opened from external URLs, should have the autoVerify-flag set
☑️ On Android, applications are signed with a v2 or newer signature
Authentication & Authorization
☑️ Single sign-on is implemented with standardized libraries, if available
☑️ Single sign-on tokens are verified, to ensure that they are issued by the correct organization
☑️ No custom solution is used for the implementation of local accounts
☑️ Passwords are hashed with an approved hashing mechanism
☑️ Passwords are sent over an encrypted, TLS, connection
☑️ If RBAC is used, roles are checked in the backend.
☑️ If RBAC is used, access is only granted when roles are explicitly specified
☑️ Applications with login functionality, should provide a logout option
Infrastructure
☑️ Databases should not be publicly accessible (including Azure services)
☑️ Databases password are cryptographically randomly created and be at least 20 characters long
☑️ Stored data should be encrypted at rest and if sent over the internet, encrypted in transit
☑️ Web apps that are publicly accessible should be served over a secure connection
☑️ Communication with key vault services should occur over a secure connection
☑️ Secret values used in CI-scripts should be marked as 'secure' in the corresponding CI-environment
☑️ Service principals should be rotated every 12 months
Environments
☑️ Development environment is not publicly accessible
☑️ Acceptance and production environments have all security measurements in place as specified in this policy
Encryption & Secrets
☑️ Secrets are stored in a secure environment
☑️ Passwords requirements meet the VolkerWessels Authenticatiebeleid
☑️ Connections are encrypted with TLS and use secure ciphers