Comment protéger mon serveur contre les activités malveillantes lors de l'acceptation et de l'exécution de code téléchargé non fiable?JVM Sandbox pour sécuriser le serveur à partir de sources non fiables
Les utilisateurs devraient être en mesure d'implémenter mon interface et données, effectuer quelques calculs et retourner des données. Aucune opération d'E/S n'est nécessaire et certainement pas de manipulation de thread/processus ou d'autres foutaises. En utilisant le fichier java.policy, il est possible de tout nier (en n'accordant rien) en utilisant le fichier java.policy. En utilisant ce fichier de stratégie, les opérations non accordées entraîneront une exception de sécurité.
$ cat Print.java
public class Print {
public static void main(String a[]) throws Exception {
System.out.println(System.getProperty("os.name"));
}
}
$ javac Print.java
$ java -Djava.security.manager -Djava.security.policy==test.policy Print
Exception in thread "main" java.security.AccessControlException:
access denied (java.util.PropertyPermission os.name read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:650)
at Print.main(Print.java:3)
Est-ce infaillible? Dois-je en faire plus pour sécuriser mon environnement serveur de sources non fiables?
Ça sonne bien. Et si je m'exécutais aussi en tant qu'utilisateur non privilégié dans une machine virtuelle Linux? – Synesso
Cela me semble bon, mais je ne peux pas en parler avec beaucoup d'autorité. Je sais seulement que la sécurité de la JVM est fragile face au monde entier. –