-2

我有編譯java文件的服務器。我怎樣才能防止我的服務器不好的Java文件。例如我的服務器不應該編譯從服務器刪除所有文件的代碼。在線java編譯器

操作系統:Windows Java版本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(); 

此代碼將執行Java程序。

我的目的是防止我的代碼PROGRAMM這樣

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

你能解釋一下你的問題在位詳情嗎?例子會很棒。 – surajsn

+2

在具有有限權限的用戶下運行編譯器/運行時。 –

+0

你似乎非常困惑。你的命令啓動Java編譯器,但給它的參數就好像它要執行提供的程序,而不是編譯它。下定決心。如果你只是提供一個編譯服務,代碼將不會被執行,所以它沒有關係。不清楚你在問什麼。 – EJP

回答

3

我不認爲你可以在編譯時做到這一點。例如,保證程序無法通過編譯時分析刪除所有文件的唯一方法是停止程序刪除任意文件。即使這很難......因爲有各種微妙的方法可以刪除使用靜態分析很難檢測到的文件。

在運行時使用Java SecurityManager來強制實施限制會更好。安全管理器/沙箱方法(如果正確實施)將允許您允許程序讀取/寫入/刪除某些文件,而不是其他文件。

更好。運行在虛擬機中運行用戶代碼的JVM,一個chroot jail,或者使用(比如說)SELinux實現的類似的東西。做到這一點,如果用戶設法顛覆你的防禦,他們不會造成任何不可逆轉的傷害。

甚至更​​好...不提供服務(有效)的匿名人員可以運行Java代碼。 (你爲什麼要爲你自​​己製造這樣的問題?)

+0

[是啊](http://ideone.com/),[爲什麼](http://www.tutorialspoint.com/compile_java_online.php)[會](https://www.compilejava.net/)[*任何人*](http://www.browxy.com/)[做](https://www.codechef.com/ide)[that](https://www.jdoodle.com/online-java-compiler )! [It's](http://compileonline.com/)[瘋狂](http://www.onlinecompiler.net/java)!! [Nobody](http://www.guru99.com/try-java-editor.html)[想要](https://codepad.remoteinterview.io/)[that](https://code.hackerearth.com /),[右](https://repl.it/languages/java)! [完全](http://codetwist.com/)[無用](https://idedr.com/)! ;-) – Arjan

+1

@Arjan - 我從來沒有說過它是無用的。我說爲什麼要「OP」做到這一點。 (尤其是......因爲你似乎在說...還有很多其他人已經提供類似的服務!) –