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
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
@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. –