2010-11-08 10 views
3

De nombreux frameworks Java permettent aux membres de la classe utilisés pour l'injection d'être déclarés non publics. Par exemple, les variables injectées dans Spring et EJB 3 peuvent être privées. JPA permet aux propriétés d'une classe persistante d'être protégées ou à un paquetage privé.Méthodes/variables d'injection: public ou non?

Nous savons qu'il est préférable de déclarer les méthodes non publiques si vous le pouvez. Cela étant dit, si je ne me trompe pas, permettre à ces frameworks d'accéder à des membres non publics ne fonctionne qu'avec le gestionnaire de sécurité Java par défaut. Cela ne signifie-t-il pas que le code personnalisé peut également accéder à un membre non public via la réflexion en appelant setAccessible(), , ce qui compromettrait la sécurité?

Ce qui pose cette question: Quelle est la meilleure pratique lors de la définition du niveau d'accès pour les méthodes d'injection?

+0

duplication possible de [Comment limiter setAccessible aux utilisations "légitimes" seulement?] (Http://stackoverflow.com/questions/2481862/how-to-limit-setaccessible-to-only-legitimate-uses) –

Répondre

2

Généralement, une classe doit s'inscrire dans un mécanisme de persistance. Par exemple, Java serialisatoin nécessite une classe pour implémenter java.io.Serializable. C'est la responsabilité des classes qui implémentent Serializable pour s'assurer qu'elles sont sécurisées. Lorsqu'une bibliothèque permet de piquer des données privées à travers un fichier de configuration externe, cela ne devrait pas être fiable - la réflexion est vraiment dangereuse et son utilisation est généralement foirée.

Bien sûr, si vous trouvez une vulnérabilité, veuillez le signaler au groupe approprié.

1

Si vous exécutez du code non approuvé dans la même JVM que votre application et que vous utilisez les paramètres par défaut du gestionnaire de sécurité, alors oui, cela pourrait être un trou de sécurité. C'est quelque chose dont vous devez être conscient, mais dans la pratique, cette situation est plutôt rare.