.NET C# Java Javascript Exception

 | 
Frage stellen Fragen Themen Mitglieder Abzeichen RSS-Feed
1
Meine Firma will ein Spiel auf einer Webseite erstellen, bei dem die Spieler darum kämpfen, die beste KI zu programmieren. Als Programmiersprachen wollen wir C# und (Iron)Python anbieten, die man über eine Textbox auf der Webseite eingeben kann und die dann auf dem Server laufen und die Spielfiguren steuern.

Wie können wir es 100% sicher hinkriegen, dass der Code seine Sandbox nicht verlässt (und keine Dateien löscht usw.)?
26.08.09
rubens 69 1 2
Kommentieren - Für Rückfragen oder Anmerkungen
3 Antworten
1
Was du vor hast ist nicht einfach. Grundsätzlich ist es richtig, dass du mit CAS und einer eigenen AppDomain ziemlich viel einschränken kannst. Pass nur genau mit Stack Overflows auf!! Wenn ein Spieler Code mit einer endlosen Rekursion auf den Server lädt und es dadurch zu einem Stack Overflow kommt, ist nicht nur die AppDomain am Ende, in der dieser Code läuft. Mir ist (seit .NET 2) keine pure Lösung in managed Code bekannt, die in einem solchen Fall etwas bringt.

Mein Tipp also: Angriffe mit Stack Overflows speziell testen!
07.09.09
r.stropek 91 1 1
0
Also strenggenommen ist die .NET Code Access Security oder CAS ausreichend, um das zu gewährleisten. Viele wissen nicht, dass man .NET-Controls im Browser laufen lassen kann. Das macht auch von Low-Trust Gebrauch. Das Vorgehen für dich wäre, dass du eine eigene AppDomain erzeugst, in der der Fremdcode laufen kann. Diese AppDomain kannst du was Rechte angeht minimal konfigurieren. Sollte der Code in der Lage sein, hieraus auszubrechen, wäre das ein Bug in Microsofts .NET-Implementation.
26.08.09
Leroy 255 1 4
0
Nebst AppDomain {} bietet sich auch IsolatedStorage{} an.
07.09.09
stealth 61 1 1
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt hier damit registrieren.


OpenID-Provider anklicken: