2009-01-24 7 views
3

Supposons que j'ai une application existante écrite en Java à laquelle je souhaite ajouter un support de script. Ceci est assez trivial avec Groovy (et tout aussi trivial dans .Net avec n'importe quelle gamme de langues dynamiques Iron).Ajout d'une sécurité de script à une application

Aussi trivial que l'ajout du support, il soulève toute une série de questions sur l'exécution et la sécurité des scripts - et comment implémenter cette sécurité.

Quelqu'un a-t-il lu des articles/articles intéressants ou a-t-il un aperçu de ce qu'il aimerait partager? En particulier, je m'intéresserais beaucoup aux choses architecturales comme les contextes d'exécution, l'authentification de script, la signature de script et d'autres choses ... vous savez, le genre de choses qui empêche les utilisateurs d'exécuter des scripts arbitraires qu'ils ont juste téléchargé bousiller toute leur application, tout en permettant aux scripts d'être utiles et flexibles.

Quick Edit

Je l'ai mentionné la signature et l'authentification comme des entités différentes parce que je les vois comme les différents aspects de la sécurité.

Par exemple, en tant que développeur/fournisseur de l'application, je distribue un script signé. Ce script est légitimement "destructeur de données" par conception. Tels que c'est la nature, il devrait seulement être exécuté par les administrateurs et donc la grande majorité des utilisateurs/processus du système ne devrait pas pouvoir l'exécuter. Cela étant, il me semble qu'une sorte de contexte de sécurité/d'authentification est nécessaire en fonction des actions que le script exécute et qui exécute ce script.

Répondre

1

Vous pouvez jeter un oeil à la documentation sur la sécurité: http://groovy.codehaus.org/Security Fondamentalement, vous pouvez utiliser le Java Security Manager habituel. Et au-delà, il y a un exemple d'application montrant comment vous pouvez introspecter le code en analysant son AST (Abstract Syntax Tree) au moment de la compilation, afin de pouvoir autoriser/interdire certaines constructions de code, etc. Voici un exemple de un shell arithmétique montrant ceci en action: http://svn.groovy.codehaus.org/browse/groovy/trunk/groovy/groovy-core/src/examples/groovyShell

2
scénario

signature

Conceptuellement, qui est juste d'atteindre dans votre boîte à outils cryptographique et en utilisant les outils qui existent. Demandez aux utilisateurs de signer leur code, de valider les signatures lors du téléchargement et de vérifier que l'auteur de la signature est fiable. La question difficile (er) est ce qui rend les gens dignes de confiance, et qui arrive à choisir cela. À moins que vos utilisateurs ne soient des technophiles, ils ne veulent pas y penser, et ils ne définiront donc pas de bonnes politiques. D'autre part, vous aurez probablement pour laisser les utilisateurs introduire la confiance [à moins que vous ne vouliez opter pour un jardin clos de style iPhone AppStore, ce qui ne sonne pas comme].

authentification script

Comment est-ce différent de la signature? Ou, est votre question juste: "quels sont les concepts que je devrais penser ici?" La vraie question est bien sûr: à quoi voulez-vous que vos utilisateurs soient protégés? Est-ce seulement une modification en transit, ou voulez-vous également faire des garanties sur le comportement des scripts? Certains exemples peuvent être: les scripts ne peuvent pas accéder au système de fichiers, les scripts ne peuvent accéder qu'à un sous-arbre particulier du système de fichiers, les scripts ne peuvent pas accéder au réseau, etc

Je pense que cela pourrait être possible [avec une modeste quantité de travail] pour fournir des garanties sur la façon dont les scripts accèdent au monde extérieur s'ils ont été faits dans haskell et la monade IO a été brisée en plus petits morceaux. Ou, éventuellement, si vous avez exécuté les scripts dans leur propre monade opaque avec accès à une partie limitée d'E/S. Veillez à supprimer l'accès aux fonctions dangereuses.

Vous pouvez également examiner les considérations relatives au modèle de sécurité Java (applet). J'espère que cela vous donne quelque chose à penser.

+0

Je pense que la réutilisation du modèle de sécurité de l'applet java semble être un bon début. – Chii