Do not expose references to mutable objects to client code. Never initialize such a field to a client-provided object reference or return the object reference from an accessor. Exposing a public static final object allows clients to modify the contents of the object (although they will not be able to change the object itself, as it is final).
Noncompliant Code Example
Code Block | ||
---|---|---|
| ||
public static final SomeType [] SOMETHINGS = { ... }; |
With this declaration, SOMETHINGS[1]
, etc. can be modified by clients of the code.
Compliant Solution
One approach is to have a private array and a public method that returns a copy of the array:
...
Now, the original array values cannot be modified by a client.
Compliant Solution 2
An alternative approach is to have a private array from which a public immutable list is contructed:
...
Now, neither the original array values nor the public list can be modified by a client.
Risk Assessment
Having a public static final array is a potential security risk, as the array elements may be modified by a client.
Guideline | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
SEC37-J | medium | likely | low | P18 | L1 |
Automated Detection
TODO
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this guideline on the CERT website.
References
[JLS 2006] Section 6.6, Access Control
[Bloch 2008] Item 13: Minimize the accessibility of classes and members
...