Nous avons une console de débogage d'administration dans notre application qui vous permet d'entrer un script et de le soumettre pour obtenir le résultat. Nous ne sommes pas préoccupés par les utilisateurs malveillants, mais voudrions empêcher les choses de base comme quelqu'un en entrant System.exit (1) juste pour voir ce qu'il fait. Malheureusement, l'ajout d'un fichier de politique de sécurité n'est pas une option. Existe-t-il un autre moyen de mettre en sandbox un script? Groovy est livré avec un gestionnaire de sécurité spécial pour cela.Prévenir System.exit dans une console Web Groovy sans fichier de politique de sécurité
Répondre
J'ai regardé « NoExitSecurityManager » Groovy et trouvé qu'il fait exactement cela: System.exit interdisant() ... ce qui ne suffit pas. Ma solution créait ma propre classe "DisallowAllSecurityManager" qui étend SecurityManager et interdit tout ce dont un script n'a pas besoin, comme l'accès en écriture au système de fichiers ou la connexion à d'autres hôtes, en lançant SecurityException dans chaque méthode check .. Mais: Vous ne pouvez pas lancer une exception dans toutes les méthodes check ... Voici une liste de contrôle .. méthodes dont vous avez besoin pour permettre:
- checkCreateClassLoader()
- checkMemberAccess()
- checkPackageAccess()
- checkPermission()
- checkPropertyAccess()
- checkRead()
Lorsque vous souhaitez évaluer votre script Groovy vous peut le faire de la manière suivante, ce qui limite uniquement le script groovy:
SecurityManager securityManager = System.getSecurityManager();
try {
System.setSecurityManager(new DisallowAllSecurityManager());
Object result = groovyShell.evaluate(expression);
...
} catch (...) {
...
} finally {
System.setSecurityManager(securityManager);
}
Le seul problème avec cette réponse est que les autres threads que celui en cours sont également affectés (c'est-à-dire que leur gestionnaire de sécurité est remplacé), ce qui peut causer des problèmes de suivi. Néanmoins, il semble que ce soit la meilleure réponse possible, alors je l'accepte. – noah
Il suffit de le régler avant d'exécuter le script,
System.setSecurityManager(new NoExitSecurityManager());
est cool, mais je ne peux pas apporter de changements globaux à la JVM, et je dois seulement limiter la sécurité pour le script. – noah
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée est modifiée – eckes
- 1. politique de sécurité IP sur Windows 2003
- 2. Java RMI: politique de sécurité du client
- 3. Utilisation de System.exit (0)
- 4. Téléchargement de fichier sécurisé dans Groovy
- 5. politique de sécurité mise à jour Java lors de l'exécution?
- 6. exception de sécurité dans asp.net
- 7. Exécution d'un test JUnit à partir de la console Groovy
- 8. Sécurité de l'application Web intranet
- 9. Comment puis-je implémenter ma politique de sécurité dans le programme java lui-même
- 10. ConfigurationErrorsException dans une application de console
- 11. Groovy: l'édition d'un fichier
- 12. Sécurité sans rôle?
- 13. Sécurité .NET Web Service
- 14. Erreur de sécurité inter-domaine dans Silverlight?
- 15. Groovy: déployer un fichier war
- 16. Processus de lancement en C# sans fenêtre de console distrayante
- 17. Accès à la caméra flash sans question de sécurité
- 18. Est-ce que groovy a un moyen facile d'obtenir un nom de fichier sans l'extension?
- 19. Python Console Site Web
- 20. Comment remplacer une méthode java de groovy
- 21. L'exécution du script Powershell de l'explorateur = erreur de politique d'exécution
- 22. Groovy: Délégation de métaclasse pour une interface?
- 23. Copie des autorisations de sécurité de fichier
- 24. Comment charger automatiquement un fichier jar de base de données dans Groovy sans utiliser le commutateur -cp?
- 25. Prévenir le téléchargement progressif de mp3?
- 26. Protection de la section dans le fichier App.config Console Application
- 27. Prévenir présentation de la variable dans l'interface graphique de CMake
- 28. Récupère le chemin de démarrage dans une console vb.net exe
- 29. Exception de coulée de classe dans Groovy
- 30. Existe-t-il un moyen standard de copier-coller pour mettre en sécurité un fichier SWF dans une page Web?
On dirait qu'il n'y a pas moyen d'y parvenir sans changer le directeur mondial de la sécurité ... Ce – noah