Java-Sandboxเป็นห้องสมุดสำหรับการดำเนินการรหัส Java กับชุดจำนวน จำกัด สิทธิ์ สามารถใช้เพื่ออนุญาตให้เข้าถึงเฉพาะคลาสและทรัพยากรที่อยู่ในบัญชีขาวเท่านั้น ดูเหมือนว่าจะไม่สามารถ จำกัด การเข้าถึงแต่ละวิธีได้ ใช้ระบบที่มีตัวโหลดคลาสแบบกำหนดเองและตัวจัดการความปลอดภัยเพื่อให้บรรลุสิ่งนี้
ฉันไม่ได้ใช้ แต่มันดูออกแบบมาดีและมีเอกสารที่ดีพอสมควร
@waqas ได้ให้คำตอบที่น่าสนใจมากเพื่ออธิบายว่าสิ่งนี้เป็นไปได้อย่างไรในการนำไปใช้ด้วยตัวคุณเอง แต่จะปลอดภัยกว่ามากหากปล่อยให้ผู้เชี่ยวชาญด้านความปลอดภัยใช้รหัสที่สำคัญและซับซ้อน
โปรดสังเกตว่าโครงการไม่ได้รับการอัปเดตตั้งแต่ปี 2013 และผู้สร้างระบุว่าเป็น "การทดลอง" โฮมเพจหายไป แต่รายการ Source Forge ยังคงอยู่
ตัวอย่างรหัสที่ดัดแปลงมาจากเว็บไซต์โครงการ:
SandboxService sandboxService = SandboxServiceImpl.getInstance();
SandboxContext context = new SandboxContext();
context.addClassForApplicationLoader(getClass().getName());
context.addClassPermission(AccessType.PERMIT, "java.lang.System");
context.addClassPermission(AccessType.PERMIT, "java.io.PrintStream");
String someValue = "Input value";
class TestEnvironment implements SandboxedEnvironment<String> {
@Override
public String execute() throws Exception {
System.out.println(someValue);
return "Output value";
}
};
SandboxedCallResult<String> result = sandboxService.runSandboxed(TestEnvironment.class,
context, this, someValue);
System.out.println(result.get());
Thread.stop
จะทำให้เกิดปัญหาในรหัสไลบรารี Java ในทำนองเดียวกันรหัสไลบรารี Java จะต้องการสิทธิ์ ที่ดีมากที่จะช่วยให้การใช้งานSecurityManager
java.security.AccessController
ตัวโหลดคลาสควรอนุญาตให้เข้าถึงคลาสของรหัสผู้ใช้เองด้วย