- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试构建一个在线java编译器。我看过一些答案,例如 this one 。但还是有一些不明白的地方。
我现在在 PHP 中使用 java -Djava.security.manager HelloWorld.class
来运行用户的 Java 代码。但如 this one说,我需要在自己的线程中运行不受信任的代码
。我真的需要构建线程吗?如果我不这样做,会导致什么? (所有用户代码都存储在不同的文档中,但类名可能相同)
如果我成功实现了线程和类加载器,我是否应该将这两个类放在不同的文件中?比如说,线程在一个文件中,类加载器在另一个文件中?
如果我用this one的方式说(这是线程+类加载器+安全管理器),这是否意味着我无法在命令行中编译代码?相反,我应该运行包含 thread + classloader + securitymanager
的 Java 文件并将一些变量传递给此类?
抱歉,请耐心解答我的问题。我懂一点Java,有太多简单的事情需要问。
最佳答案
java -Djava.security.manager -java.security.policy=filename.policy HelloWorld.class
其中 filename.policy 是硬盘驱动器上的一个没有任何条目的文件,将“充分”对代码进行沙箱处理,并防止其在您的 PC 上进行恶意写入/读取。
仅运行它的问题是允许无限循环,并且它可能会消耗所有 CPU 功率并且永远不会停止。
解决这个问题的方法确实是创建一个新的不同程序,该程序创建一个新的进程并启动它,并且只允许该进程在终止(暴力)之前存在一定的时间范围。
这是我为此编写的一些代码(从旧代码中删除):
class TestProcess {
private static final ExecutorService THREAD_POOL = Executors.newCachedThreadPool();
public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
List<String> out = new ArrayList<>();
IntegerCallable ic = new TestProcess.IntegerCallable(out);
int returnVal = timedCall(ic);
}
private static <T> T timedCall(Callable<T> c) throws InterruptedException, ExecutionException, TimeoutException {
FutureTask<T> task = new FutureTask<>(c);
THREAD_POOL.execute(task);
return task.get(3, TimeUnit.SECONDS);
}
public static class IntegerCallable implements Callable<Integer> {
private final List<String> output;
private Process process;
public IntegerCallable(List<String> out) {
this.output = out;
}
public Integer call() throws Exception {
ProcessBuilder pb = new ProcessBuilder("java", "-cp", "execCommand/", "-Djava.security.manager", "-Djava.security.policy=execCommand/exec.policy", "-Xmx64M", "Exec");
pb.redirectErrorStream(true);
process = pb.start();
try (final Scanner scan = new Scanner(process.getInputStream())) {
while (scan.hasNext())
output.add(scan.nextLine());
}
return process.exitValue();
}
}
}
行 ProcessBuilder pb = new ProcessBuilder("java", "-cp", "execCommand/", "-Djava.security.manager", "-Djava.security.policy=execCommand/exec.policy ", "-Xmx64M", "Exec");
需要根据您的需要进行编辑。此行在名为 execCommand 的文件夹(也是 exec.policy 文件的位置)内执行 Exec.class 文件,并为其分配最大 64MB 堆。
关于java - 如何对 Java 程序进行沙箱处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212787/
是否可以通过覆盖alert、window.location 和eval 等各种函数来对用户提交的 Javascript 进行沙箱处理? 我不是在寻找完美的解决方案。我敢肯定,有些人仍然会找到一种方法来
我想让开发人员用 Javascript 为网站编写一些自定义应用程序,但我想将其沙盒化,这样他们就不能做任何调皮的事情,比如重定向用户、将正文显示设置为无等等。我有一个命名空间Javascript,其
所以我使用一个程序,我在 lua 中编写 mods,lua 处于沙箱状态,这意味着大多数功能都被阻止,如 IO 和 OS,我什至不能使用 REQUIRE 添加库。我需要一个功能来解压缩我的一个 mod
我编写了一个简单的 RMI 服务器,并为其指定了默认的 RMISecurityManager: System.setSecurityManager (new RMISecurityManager())
我希望允许用户定义自己的函数以在程序中使用,但是,我不希望他们破坏东西 - 理想情况下我想将其限制为核心语言函数,也许是 数学模块 自定义函数将是这样的(在 user_function.py 中定义,
我需要在第一次运行我的应用程序时将一些 png 从主包复制到文档文件夹。我需要它,因为我必须将这些图像的文件路径保存在核心数据实体中。 我试过了,但是不行,有人知道为什么吗? // to copy i
我在使用 Paypal Sandbox 时遇到货币问题。 我正在使用沙盒测试我网站的定期付款(数字商品,快速结账) 一切都按预期工作。 用户点击支付。 用户被转移到paypal express che
我们正在尝试使用 StoreKit 实现简单的应用内购买(不确定它是否与它有任何关系)并且到目前为止一切顺利,但是我们面临一个特定问题:当我们退出应用时, iOS 永久要求我们登录: 只有在使用沙盒或
这个问题在这里已经有了答案: How can I sandbox Python in pure Python? (7 个回答) 关闭9年前。 我想创建一个网站,人们可以上传他们的 Python 脚本。
不是开发人员,而是想弄清楚如何生成一个 revolut 业务 api,以在 woocommerce 上设置一个沙盒 revolut 支付网关。我按照 open ssl instructions 生成
current documentation cabal 显示 sandbox子命令。 respective page on github不再包含有关沙箱的部分。 我使用的是 cabal 版本 3.2.
我有兴趣了解 extjs 沙箱,但无法在网络上找到太多相关信息。有人可以告诉或指出一些有关 extjs 沙箱是什么以及它是如何工作的相关资源。提前致谢! 最佳答案 Ext JS 沙箱只是顶级命名空间上
我有一个沙盒 Cocoa 应用程序。它有一个单窗口、多选项卡用户界面。我不使用 NSDocument,但它是一个可以编辑多个“文档”的应用程序。当应用程序关闭时,我保存打开文档的列表。当我重新启动应用
有人可以向我解释一件事吗?是否可以像在 Salesforce(开发者组织)中那样为开发者获得免费的 NetSuite 沙盒帐户? 最佳答案 您可以成为社区开发者,并获得一个免费的 Netsuite 帐
我正在尝试创建到 Revolut 的客户端连接。我正在关注他们的 tutorial ,但是我被困在 交易所授权码 . 到目前为止我做了什么: 在他们的 sanbox 上创建了企业帐户 在此处添加了我的
因此,Lua 似乎是在我的应用程序中实现安全“用户脚本”的理想选择。 但是,大多数嵌入lua的示例似乎都包含加载所有标准库,包括“io”和“package”。 所以我可以从解释器中排除这些库,但即使是
因此,我尝试使用插件包从源文件动态加载 haskell 函数。源文件依赖于带有模块 Foo.Bar 的包 foo。我正在 Cabal 沙箱中运行我的项目,其中安装了 foo。我的主程序和我使用插件加载
我正在使用 Pipeline Pilot 进行一些工作,并注意到所有内置的 HTML 组件都可以执行某些操作,例如可折叠面板、选项卡或任何其他可能具有我无法访问的 javascript 的内容,从而导
我今天获得了 Instagram api 并实时添加了我的网站,我看到写: 客户端状态:沙盒模式上线 为什么我无法点击“上线”按钮? 最佳答案 不过,您需要开始提交以获得批准才能上线: 网站的 Fee
我有一些代码正在尝试使用这样的结构进行测试(根据 Cleaning up sinon stubs easily ): function test1() { // manually create
我是一名优秀的程序员,十分优秀!