Mi sono imbattuto in questa domanda su StackOverflow: link
L'affermazione è fatta, che secondo Wikipedia:
A final class cannot be subclassed. This is done for reasons of security and efficiency.
e l'OP ha chiesto come si ottiene la sicurezza utilizzando la parola chiave final.
Ciò che mi ha sorpreso, la maggior parte delle risposte sosteneva, che la parola chiave finale aumenterebbe notevolmente la sicurezza, perché l'attaccante non sarebbe in grado di scavalcare le classi e chiamare i metodi protetti ecc. Si basano principalmente sull'articolo di Oracle Linee guida per la codifica sicura
For example, making a class final prevents a malicious subclass from adding
finalizers, cloning, and overriding random methods
Tuttavia, con la mia comprensione, se l'attaccante acquisisce la possibilità di eseguire codice Java arbitrario sul sistema di destinazione (e se si considera che abbia scavalcato le classi, è previsto che lo sia) di quanto non possa già fare tutto il codice è in grado di fare, quindi è completamente irrilevante dal punto di vista della sicurezza, se i tuoi metodi sono definitivi o meno, o anche se i campi sono privati e non esposti o no (può serializzare la tua classe e leggere ogni campo ecc.). p>
Ma dall'altra parte, è possibile trovare uno scenario simile nella vita reale, quando l'attaccante non raggiungerebbe i suoi obiettivi eseguendo codice arbitrario, e riuscirà solo (o tale attacco sarebbe considerevolmente più facile) "maliziosamente" 'annullando le tue lezioni, come descritto nell'articolo di Oracle? Ad esempio, se il server delle applicazioni è condiviso da più applicazioni Java?