Ich denke darüber nach, einen einfachen Onlinedienst zu entwickeln, in dem Programmierer Programmieraufgaben lösen können, indem sie ihre Lösung in Form von Quellcode an meinen Server senden dann interpretiert / kompiliert und ausgeführt / getestet.
Mit der Java VM konnte ich sofort Unterstützung für Java, Scala, Clojure, Ruby, Python und Javascript anbieten. Aber wenn ich genau darüber nachdenke, fürchte ich, dass ich nicht weiß, wie man die Ressourcen und Berechtigungen eines Skripts einschränkt.
Ich meine, es sollte nicht möglich sein
Wie kann ich jedes Skript in eine Sandbox stellen?
Nach dem, was ich gelesen habe, scheint der SecurityManager das alles nicht zu tun ...
Nun, Sie können ein allgemeines Sicherheitssystem verwenden, um eine sichere Codeausführung wie AppArmor oder SELinux . Es funktioniert nicht nur für Java, Python, etc. Anwendungen, sondern auch für Bash-Skripte, ausführbare Binärdateien und so weiter. Habe mit SELinux überhaupt nicht gearbeitet, aber dies ist ein einfaches Beispiel für das Sicherheitsprofil von AppArmor, das alles, was Sie erwähnt haben, außer "mehr als X Sekunden ausgeführt" ausführt - dies kann durch Timeout-Mechanismus (Ich bin ein neuer Benutzer, also kanone hier einen zweiten Link O_o ..)
%Vor%Wie wäre es, jedes Skript in eine Sandbox zu legen? Sie können mehrere identische Profile für script1, script2 usw. erstellen. Dies ist auch der Fall, wenn Sie verschiedene Berechtigungen für verschiedene Übungen auf Ihrer Site haben wollen.
Dies ist ein Beispiel für die Verwendung von timeout:
%Vor%Ich möchte Ihnen auch empfehlen, die Kompilierungszeit für kompilierte Programmiersprachen zu begrenzen, wenn Sie welche haben. Zum Beispiel kann jemand in C ++ eine knifflige Vorlage schreiben oder
%Vor%Das wird CPU-intensive Arbeit zur Kompilierzeit verursachen.
Sie können die Java Scripting API verwenden. Viele Sprachen können als Skript verwendet werden, auch Java. Außerdem erfordert es nicht viel Programmieraufwand, um eine Sprache mit der Skript-API zu verbinden. Ссылка gibt an, wie Sandboxing bereitgestellt wird.
Sie haben einen JVM-Port beschrieben, der den von der Google App-Engine aktivierten Klassen auf der weißen Liste ähnelt.
Es gibt eine hervorragende Erklärung dafür, wie Sie eine JVM hier sandboxen können: Wie funktioniert Google App Engine Sandbox?