[英]How block the use of java.io.file
我正在我的 Linux 服務器上為我的學生創建一個網頁來在線編譯 Java 代碼:他們在 textarea/html 中編寫他們的代碼,然后按下一個按鈕來編譯/執行他們的程序
第一個想我想做的,它是禁止使用“java.io.file”......你有什么阻止這種訪問的技巧嗎? 我使用 jdk.8.0_60
我不知道是否有人有一些信息來提高我服務器上代碼執行的安全性......
您可以啟用 Java 安全管理器。
有關安全性的指南,請參閱此頁面。 請參閱Java™ 安全概述鏈接的第 8 節“訪問控制”。
通過使用策略文件,您可以控制允許哪些文件(如果有),但還有許多其他方面可以控制。 有關列表,請參閱策略權限鏈接。 以下是一些值得注意的:
FilePermission
表示對文件或目錄的訪問。RuntimePermission
用於運行時權限,例如 prevent System.exit()
。SocketPermission
表示通過套接字訪問網絡。URLPermission
表示訪問由給定 URL 定義的資源的權限。注意:即使使用安全管理器,您仍應使用操作系統文件安全保護您的服務器。
你不能真正限制 JVM 中標准庫的使用......至少不容易。
如果你想防止你的學生弄亂你的文件系統,你應該利用操作系統來做到這一點。 在僅限於特定目錄且顯然沒有sudo
權限的用戶帳戶下執行代碼。
您的服務器應該已經設置為敏感數據(例如成績)不能被系統上的任何用戶訪問。
定義並注冊您自己的安全管理器允許您限制的代碼做什么-請參見Oracle文檔安全管理器。
查看java-sandbox 項目,它允許您輕松創建非常靈活的沙箱來運行不受信任的代碼。
java-sandbox 允許安全地執行不受信任的代碼,例如來自您的應用程序中的第三方或用戶生成的代碼。 它允許指定代碼可能使用的資源和類,從而將執行與應用程序的執行環境分開。
真的謝謝,我想我達到了我的目標......
我在路徑“/home/policy”中創建了一個文件,其中包含以下幾行:grant { permission java.lang.RuntimePermission "setSecurityManager"; 權限 java.lang.RuntimePermission "createSecurityManager"; 權限 java.lang.RuntimePermission "usePolicy"; };
我嘗試了這段代碼,它給我錯誤,因為我只讀取了一個正確的 777 文件:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.IOException;
public class Main extends SecurityManager {
public static void main(String[] args) {
// set the policy file as the system securuty policy
System.setProperty("java.security.policy", "file:/home/java.policy");
// create a security manager
Main sm = new Main();
// set the system security manager
System.setSecurityManager(sm);
System.out.println("Test");
//lit un fichier
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("/home/a.txt"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// print a message if we passed the check
System.out.println("Allowed!");
}
}
我希望這是正確的方式......謝謝你的幫助托馬斯
感謝您的回答......我現在使用這個命令行
java -Xmx16M -Xms2M -Xss2M -Djava.security.manager Djava.security.policy=/home/java.policy Main
謝謝湯姆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.