2010-01-30 7 views
2

Nous utilisons actuellement Google App Engine pour évaluer les solutions aux problèmes Python soumis par les étudiants. Nous avons déplacé toute l'exécution de code non fiable vers une application GAE distincte qui n'utilise pas la banque de données. Tout semble fonctionner correctement pour les 50+ problèmes que nous avons téléchargés, mais je suis curieux de savoir quels sont les trous de sécurité que les étudiants industrieux trouveront. Comment devrions-nous protéger davantage ce code contre le code non approuvé qu'il exécute dans GAE?Comment verrouiller davantage une application Google App Engine exécutant un code non fiable?

#The solution and doctest are untrusted code passed in to the GAE app. 
solution = 'b=5' 
doctest = '>>> b \n 5' 

#Compile and exec the untrusted solution provided by the user. 
compiled = compile(solution, 'submitted code', 'exec') 
sandbox = {} 
exec compiled in sandbox 

#Compile and exec each of the doctests 
test_cases = doctest.DocTestParser().get_examples(doctest) 
for test in test_cases: 
    if not test.want: 
    exec test.source in sandbox 

Répondre

3

Regardez shell.appspot.com's source - il utilise en fait même le datastore (pour la persistance de session). Au fond, il s'agit simplement de faire un simple exec comme vous l'êtes - il y a d'autres améliorations, mais rien de spécial par rapport à "lockdown" du code non fiable. On peut supposer que les ingénieurs de Google (dans l'équipe App Engine) qui ont publié cet exemple de code se sentent plutôt bien à propos de sa sécurité contre les codes non fiables. La seule "attaque" réalisable à laquelle je peux penser est une attaque de "déni de service" qui absorbe à plusieurs reprises des ressources et provoque la facturation de votre compte (si elle est activée pour une utilisation au-delà du quota libre) - Tant que vous avez stocké quelque part en toute sécurité (dans une application différente) l'identité de celui qui a téléchargé un morceau de code donné, je ne vois pas pourquoi un étudiant devrait essayer une telle farce et risque d'expulsion ou quelque chose.

+0

Je cherche à ouvrir l'application pour toute personne possédant un compte GMail. Je suppose que je suis curieux de savoir si des personnes essaient d'envoyer des courriels ou d'accéder à des URL à partir de l'application de quotas gratuits. Le code non fiable pourrait-il accéder à ces services? – Chris

+0

@Chris, oui, bien sûr, il serait parfaitement capable d '«importer» n'importe quel module et d'accéder à n'importe quelle fonction dans ce module; vous pouvez cependant patcher vos propres modules neutralisants/vides dans 'sys.modules' pour éviter cela. –