Enforce Access Controls
Access Control or Authorization is the process of granting or denying specific requests from a user, program, or process.
Refer to proactive control C1: Implement Access Controls and its cheatsheets for more context from the OWASP Top 10 Proactive Controls project, and use the list below as suggestions for a checklist that has been tailored for the individual project.
1. Access control (AC)
- Design access control / authorization thoroughly up-front
- Force all requests to go through access control checks unless public
- Deny by default; if a request is not specifically allowed then it is denied
- Apply least privilege, providing the least access as is necessary
- Log all authorization events
- Create unit and integration test to document and verify an application's business rules, data types and access authorization criteria and/or processes so that access can be properly provisioned and controlled for restricting function-level, data-specific, and field-level access based on consumer permissions and resource attributes
- Access Control criteria and/or processes not testable through automated tests should be documented so that they can be manually tested
- Use only trusted system objects for making access authorization decisions
- Use a single site-wide component to check authorization
- Access control should fail securely
- Deny all access if the application cannot access its security configuration information
- Segregate privileged logic from other application code
- Do not hard code access controls that are role based
- Enforce application logic flows to comply with business rules
- Server side implementation and presentation layer representations of access control rules should not differ in such a way that they allow for business functionality and rules to be compromised
2. Access control management (ACM)
- Limit the number of transactions a single user or device can perform in a given period of time, low enough to deter automated attacks but above the actual business requirement
- Implement account auditing and enforce the disabling of unused accounts
- A new account should have minimal or no access by default
- For highly sensitive accounts implement Just in Time (JIT), Just Enough Access (JEA) management and avoid the use of admin accounts with global access
- Restrict function-level access to consumers with explicit permissions
- Restrict direct object references to only authorized users with explicit permissions to specific data items
to mitigate insecure direct object reference (IDOR) and broken object level authorization (BOLA) - Restrict access to user and data attributes to consumers with explicit permissions to specific fields to mitigate broken object property level authorization (BOPLA)
- Restrict access security-relevant configuration information to only authorized users who have been allowed access through multiple layers of security, including continuous consumer identity verification, device security posture assessment, and contextual risk analysis
- If the application must run with elevated privileges, raise privileges as late as possible, and drop as soon as possible
References
- OWASP Cheat Sheet: Authorization
- OWASP Top 10 Proactive Controls
The OWASP Developer Guide is a community effort; if there is something that needs changing then submit an issue or edit on GitHub.