问题标签 [sandbox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3524 浏览

java - Rhino:限制可以从 JavaScript 访问的 Java 包

当将 JavaScript 解释器 (Rhino) 嵌入到 Java 应用程序中(以便能够编写该应用程序的脚本)时,如何限制脚本可用的 Java 包?例如,应该只能访问“java.lang.*”。

0 投票
4 回答
2221 浏览

java - Sandboxing Java / Groovy / Freemarker Code - Preventing execution of specific methods

I'm developing a system that allows developers to upload custom groovy scripts and freemarker templates.

I can provide a certain level of security at a very high level with the default Java security infrastructure - i.e. prevent code from accessing the filesystem or network, however I have a need to restrict access to specific methods.

My plan was to modify the Groovy and Freemarker runtimes to read Annotations that would either whitelist or blacklist certain methods, however this would force me to maintain a forked version of their code, which is not desirable.

All I essentially need to be able to do is prevent the execution of specific methods when called from Groovy or Freemarker. I've considered a hack that would look at the call stack, but this would be a massive speed hit (and it quite messy).

Does anyone have any other ideas for implementing this?

0 投票
2 回答
5533 浏览

c# - 线程可以作为另一个用户执行吗?(.NET 2.0/3.5)

我有一个 C# 应用程序,它将包含计算的源文件执行一些运行时编译到动态程序集中。显然,这提出了一个严重的安全问题。

根据以下“公式”,将生成以下代码,并创建一个动态程序集:

公式:

生成的代码:

然后加载动态程序集并通过反射执行 Evaluate 方法。这很好用。

问题是恶意代码注入的可能性很大,所以我想在“沙盒”线程中运行 Evaluate 方法(没有任何非托管 API 调用)。出于测试目的,我使用了内置的匿名 Windows 用户,并提供了以下代码:

这给了我匿名用户的身份和主体。如何将其应用于线程 tSandbox,以便该线程上的代码在指定的安全上下文中运行,而不使用非托管 API 调用?

谢谢!

0 投票
5 回答
2132 浏览

java - 可以在沙盒中运行的 Mini-OSGi(如 AppEngine 或 WebStart)?

我真的很喜欢 OSGi 实现的模块化包的概念。

我还喜欢“托管部署”服务,例如 Google AppEngine(用于 Web 应用程序)或 Java WebStart(用于客户端软件)。

这两个想法似乎在概念上很好地相互补充。

然而,OSGi 标准包含一些特性,使得 Felix 或 Equinox 等实现无法在 AppEngine 或 Webstart 等沙盒虚拟机之上运行。在这些环境中,无法直接访问文件系统,例如,这排除了用于存储持久包状态和本机库的 OSGi 包缓存。

现在,我对使用本机库或拥有持久包状态没有太大兴趣。是否有一些框架实现了 OSGi 的核心包和服务概念(理想情况下以兼容的方式,以便 OSGi 包可以按原样部署到其中),但可以在没有包缓存的情况下工作(以及沙箱中不可用的其他工具) ?

我正在寻找适用于 AppEngine 或 WebStart 的有限版本的 Felix。

当然,如果 WebStart 引擎和 Google AppEngine 只是提供开箱即用的 OSGi 框架服务,那也很棒……

更新: AppEngine 的另一个非常有限的方面是您无法启动新线程。这可以防止(除其他外)异步捆绑生命周期管理。WebStart 显然不是问题。

0 投票
3 回答
3754 浏览

c - 子进程的内存使用情况?

我在 Ubuntu 上用 C 语言运行一种“沙箱”:它需要一个程序,并在用户下安全地运行它nobody(并拦截信号等)。此外,它还分配内存和时间限制,并测量时间和内存使用情况。
(如果您很好奇,这是一种“在线法官”在测试数据上标记程序)

目前我已经从mooshak改编了safeexec模块。尽管大多数事情都可以正常工作,但内存使用似乎是个问题。(这是非常不准确的)

现在我已经尝试了这里的建议并从 中解析了 VM /proc/pid/stat,现在准确性问题已得到解决。但是,对于真正快速完成的程序,它不起作用,只会返回 0。

safeexec程序似乎是这样工作的

  1. fork()
  2. 在子进程中使用execv()以运行所需的程序
  3. 从父进程监视程序,直到子进程终止(使用wait4,这恰好返回 CPU 使用率 - 但不是内存?)
    因此它解析/proc/../stat子进程(已被 execv 替换)

那么为什么 VM in/proc/child_pid/stat有时等于 0?
是因为 execv() 完成得太快,而且/proc/child_pid/stat不可用吗?
如果是这样,是否有其他方法可以获取孩子的内存使用情况?
(因为这是为了在时间限制内判断程序,所以我不能承受像 valgrind 这样的性能损失)

提前致谢。

0 投票
5 回答
206036 浏览

javascript - 在各种浏览器中以javascript在客户端读取文件内容

我正在尝试提供一种纯脚本解决方案,用于通过浏览器读取客户端计算机上的文件内容。

我有一个适用于 Firefox 和 Internet Explorer 的解决方案。它不漂亮,但我现在只是在尝试:

我可以打电话getFileContents(),它会将内容写入fileContents文本区域。

有没有办法在其他浏览器中做到这一点?

目前我最关心的是 Safari 和 Chrome,但我对任何其他浏览器的建议持开放态度。

编辑:针对这个问题,“你为什么要这样做?”:

基本上,我想在客户端将文件内容与一次性密码一起散列,以便我可以将此信息作为验证发回。

0 投票
3 回答
8234 浏览

java - 为当前线程禁用 Java 反射

我需要调用一些半可信的 Java 代码,并希望在该代码执行期间禁用使用反射的能力。

这可以用 SecurityManager 来完成吗?如果可以,怎么做?

澄清/上下文:这是关于限制可以从 JavaScript/Rhino 调用的包的另一个问题的后续。接受的答案引用了一篇关于如何做到这一点的博客条目,它需要两个步骤,第一个步骤使用 Rhino API (ClassShutter),第二个步骤关闭反射和 Class.forName()。我在想我可以使用 SecurityManager 更干净地完成第二步(学习 SecurityManager,正如已经指出的那样,这是一个复杂的野兽,一路走来)。

总而言之,我希望(从代码,而不是设置文件)关闭 Class.forName() 以及对整个反射包的任何访问。

0 投票
9 回答
11185 浏览

linux - 在我的服务器上运行其他人代码(沙箱)的安全方式?

我想制作一个在本地运行其他人代码的 Web 服务。自然,我想限制他们的代码访问某个“沙盒”目录,这样他们就无法连接到我服务器的其他部分(数据库、主网络服务器等)

最好的方法是什么?

运行 VMware/Virtualbox:

  • + 我想它是最安全的。即使有人设法“破解”,他们也只会破解来宾机器

  • + 可以限制进程使用的 CPU 和内存

  • + 易于设置 - 只需创建虚拟机

  • - 更难将沙盒目录从主机“连接”到来宾

  • - 浪费额外的内存和 CPU 来管理 VM

运行特权用户:

  • + 不浪费额外资源

  • + 沙盒目录只是一个普通目录

  • ? 不能限制CPU和内存?

  • ? 不知道够不够安全

还有什么办法吗?

运行 Fedora Core 8 的服务器,用 Java 和 C++ 编写的“其他”代码

0 投票
5 回答
404 浏览

security - 您如何在托管服务中监控、管理和运行不受信任的第三方代码?

假设我正在运行一个托管服务,它希望允许第三方客户端编写的插件。

也许是提供基础设施但允许客户开发自己的游戏裁判的游戏服务提供商。或者,一个编码竞赛网站,允许编码人员提交代码以作为他们对某些编码问题的解决方案来运行。

您将如何加固/锁定/沙箱此用户代码以免对打算运行它的服务器造成潜在损害?

您将如何监控和限制资源使用(主要是 CPU、内存)?

这对 Python 来说是一个好的开始,但我想知道这里是否有人有更具体的经验可以分享,无论使用哪种语言(Python、Lua、Ruby 等)。

0 投票
8 回答
3253 浏览

php - 传递给 create_function 的 PHP 沙箱/清理代码

我正在使用 create_function 在服务器端运行一些用户代码。我正在寻找以下两个中的任何一个:

  1. 有没有办法清理传递给它的代码以防止执行有害的东西?
  2. 或者,有没有办法指定此代码在沙盒环境中运行,以便用户无法玩弄其他任何东西。

谢谢!