-2

Ich habe Server, der Java-Dateien kompiliert. Wie kann ich meinen Server vor fehlerhaften Java-Dateien schützen? Zum Beispiel sollte mein Server keinen Code kompilieren, der alle Dateien vom Server löscht.Online-Java-Compiler

Os: Fenster Java Version 1.8 C#

runner = new Process 
     { 
      StartInfo = 
      { 
       UseShellExecute = false, 
       RedirectStandardOutput = true, 
       RedirectStandardError = true, 
       FileName = JavaCompiler.PATH_TO_COMPILER, 
       Arguments = " -cp " + pathToFile + " Main", 
       CreateNoWindow = true, 
       WorkingDirectory = pathToFile 
      } 
     }; 


     runner.Start(); 

Dieser Code wird Java-Programm ausführen.

Mein Ziel ist es mein Programm von Codes zu verhindern wie diese

File f = new File("c:\\");  
String[]entries = index.list(); 
    for(String s: entries){ 
     File currentFile = new File(index.getPath(),s); 
     currentFile.delete(); 
    } 
+0

Können Sie Ihr Problem in Bit-Details zu erklären? Beispiel wäre großartig. – surajsn

+2

Führen Sie den Compiler/die Laufzeit unter einem Benutzer mit eingeschränkten Berechtigungen aus. –

+0

Sie scheinen furchtbar verwirrt. Ihr Befehl startet den Java-Compiler, gibt ihm jedoch Argumente, als würde er das mitgelieferte Programm ausführen, nicht kompilieren. Entscheide dich. Wenn Sie nur einen Kompilierungsdienst anbieten, wird der Code nicht ausgeführt, es spielt also keine Rolle, was er tut. Unklar, was du verlangst. – EJP

Antwort

3

Das glaube ich nicht, dass Sie diese bei der Kompilierung tun. Der einzige Weg zu Garantie, dass ein Programm nicht alle Dateien über die Kompilierzeitanalyse löschen kann, ist, das Programm davon abzuhalten, Datei zu löschen. Und selbst das ist schwierig ... weil es verschiedene Möglichkeiten gibt, Dateien zu löschen, die mit statischer Analyse schwer zu erkennen sind.

Sie wären besser dran mit einem Java SecurityManager, um die Einschränkungen zur Laufzeit durchzusetzen. Der Sicherheitsmanager/Sandbox-Ansatz (falls korrekt implementiert) würde es erlauben, dass ein Programm einige Dateien lesen/schreiben/löschen kann, und keine anderen.

Besser noch. Führen Sie die JVM aus, auf der der Code des Benutzers ausgeführt wird, in einer virtuellen Maschine, einer Chroot-Jail-Datei oder etwas Ähnlichem, das mit (etwa) SELinux implementiert wird. Machen Sie es so, dass der Benutzer, wenn er es schafft, Ihre Abwehr zu untergraben, keinen irreversiblen Schaden anrichtet.

Oder noch besser ... bieten Sie keinen Service an, wo (effektiv) anonyme Leute Java-Code ausführen können. (Warum würden Sie wollen diese Art von Problem für sich selbst machen?)

+0

[Ja] (http://ideone.com/), [warum] (http://www.tutorialspoint.com/compile_java_online.php) [würde] (https://www.compilejava.net/) [* irgendjemand *] (http://www.browxy.com/) [do] (https://www.codechef.com/ide) [das] (https://www.jdoodle.com/online-java-compiler)! [Es ist] (http://compileonline.com/) [verrückt] (http://www.onlinecompiler.net/java) !! [Niemand] (http://www.guru99.com/try-java-editor.html) [will] (https://codepad.remoteintinterview.io/) [das] (https://code.hackerearth.com /), [rechts] (https://repl.it/languages/java)! [Vollständig] (http://codetwist.com/) [Nutzlos] (https://ididedr.com/)! ;-) – Arjan

+1

@Arjan - Ich habe nie gesagt, dass es nutzlos war. Ich sagte, warum sollte >> das OP << tun. (Vor allem seit ... wie Sie zu sagen scheinen ... gibt es viele andere Leute, die bereits einen ähnlichen Service anbieten!) –