标签: sandbox

如何创建Java沙箱?

我想让我的应用程序运行其他人的代码,也就是插件.但是,我有什么选择才能使其安全,因此他们不会编写恶意代码.我该如何控制他们能做什么或不能做什么?

我偶然发现JVM有一个"内置沙箱"功能 - 它是什么,这是唯一的方法吗?是否有用于制作沙箱的第三方Java库?

我有什么选择?赞赏指南和示例的链接!

java security plugins sandbox

46
推荐指数
3
解决办法
3万
查看次数

安全沙箱并执行用户提交的JavaScript?

我希望能够让用户提交任意JavaScript代码,然后将其发送到Node.JS服务器并安全执行,然后将输出发送回多个客户端(作为JSON).eval我想到了这个功能,但我知道这有多个安全问题(用户提交的代码可以访问Node的File API等).我见过一些项目,如Microsoft Web Sandbox和Google Caja,它们允许执行清理标记和脚本(用于在网站上嵌入第三方广告),但似乎这些是客户端工具,我不确定它们是否可以在Node中安全使用.

有没有一种标准的方法来沙盒并在Node中执行不受信任的JavaScript,从而获得输出.尝试做这个服务器端是错误的吗?

编辑:用户能够利用JavaScript的全部功能并不重要,事实上,最好能够选择将哪些API提供给用户代码.

编辑:我将继续使用我发现的内容进行更新.这个Sandcastle模块(bcoe/sandcastle)似乎旨在实现我的想法.不确定它有多安全,但由于我不是太重要,我想如果尝试的话.如果我能成功地做到这一点,我会添加自己的答案.

javascript eval sandbox sanitize node.js

42
推荐指数
4
解决办法
1万
查看次数

38
推荐指数
3
解决办法
4万
查看次数

使用Google Chrome Sandbox

有几种资源可以解释Chrome中的沙盒是如何工作的,以及它如何保护用户免受恶意代码的侵害.

Chromium博客
Chromium开发人员文档
沙箱常见问题解答

这很棒,我喜欢他们所拥有的以操作系统为中心的设计(有点像"操作系统可能知道如何更好地保护自己,所以我们让它"接近.)他们在几个地方也提到了sandbox本身被设计为不依赖于Chrome,而是或多或少独立,因此理论上只要程序的体系结构兼容,任何进程都可以进行沙盒化(沙盒代码必须作为自己的进程运行,因为它是一个孩子的非沙盒父母.)

我碰巧有一个应用程序,它的设计使沙盒成熟,并且能够让父/子进程使用它.我有Chromium代码并且......不知道下一步该做什么.

有没有人在那里实际上用沙盒装了什么呢?是否有任何资源记录了它的用法或API?我想它应该很简单,但我不知道从哪里开始.

编辑:我的答案在下面找到!

c++ google-chrome sandbox

37
推荐指数
1
解决办法
8765
查看次数

codepad.org和ideone.com等网站如何沙盒你的程序?

我需要在我的网站上编译和运行用户提交的脚本,类似于键盘ideone所做的.我如何沙箱这些程序,以便恶意用户不会关闭我的服务器?

具体来说,我想将它们锁定在一个空目录中,防止它们在其外的任何地方读取或写入,避免消耗太多内存或CPU,或者做任何其他恶意操作.

我需要通过沙箱外部的管道(通过stdin/stdout)与这些程序进行通信.

language-agnostic operating-system sandbox system-calls

37
推荐指数
3
解决办法
5499
查看次数

如何在沙盒中使用Rhino for Java运行Javascript?

我们的Java应用程序的一部分需要运行由非开发人员编写的javascript.这些非开发人员使用javascript进行数据格式化.(主要是简单的逻辑和字符串连接).

我的问题是如何设置这些脚本的执行以确保脚本错误不会对应用程序的其余部分产生重大负面影响.

  • 需要防范无限循环
  • 防止产生新线程.
  • 限制对服务和环境的访问
    • 文件系统(示例:如果心怀不满的脚本编写者决定删除文件)
    • 数据库(同样删除数据库记录)

基本上我需要设置javascript范围,只包括他们需要的内容,而不是更多内容.

javascript java sandbox rhino

36
推荐指数
3
解决办法
1万
查看次数

如何创建轻量级C代码沙箱?

我想构建一个C预处理器/编译器,允许从本地和在线资源收集功能.即:

#fetch MP3FileBuilder http://scripts.com/MP3Builder.gz
#fetch IpodDeviceReader http://apple.com/modules/MP3Builder.gz

void mymodule_main() {
  MP3FileBuilder(&some_data);
}
Run Code Online (Sandbox Code Playgroud)

这很容易.

困难的部分是我需要一种可靠的方法来"沙箱化"导入的代码,直接或不受限制地访问磁盘或系统资源(包括内存分配和堆栈).我想要一种方法来安全地运行不受信任的C代码(模块)的小片段,而没有将它们放在单独的进程,VM或解释器中的开销(尽管可以接受单独的线程).

要求

  • 我需要对其访问数据和资源(包括CPU时间)进行配额.
  • 我将阻止直接访问标准库
  • 我想阻止创建无限递归的恶意代码
  • 我想将静态和动态分配限制为特定限制
  • 我想捕获模块可能引发的所有异常(例如除以0).
  • 模块只能通过核心接口与其他模块交互
  • 模块只能通过核心接口与系统(I/O等)进行交互
  • 模块必须允许位操作,数学,数组,枚举,循环和分支.
  • 模块不能使用ASM
  • 我想限制指针和数组访问为模块保留的内存(通过自定义safe_malloc())
  • 必须支持ANSI C或子集(见下文)
  • 系统必须是轻量级和跨平台的(包括嵌入式系统).
  • 系统必须与GPL或LGPL兼容.

我很乐意接受C的一个子集.我不需要像模板或类这样的东西.我主要对高级语言不能像快速数学,位操作以及二进制数据的搜索和处理这样的事情感兴趣.

这是现有C代码可以不加修改地重复使用,以创建一个模块的意图.目的是要求模块符合一组规则和限制,旨在将模块限制为基本逻辑和转换操作(例如视频转码或压缩操作).

这种编译器/预处理器的理论输入是单个ANSI C文件(或安全子集),带有module_main函数,NO包含或预处理器指令,没有ASM,它将允许循环,分支,函数调用,指针数学(限于分配给模块的范围),位移,位域,强制转换,枚举,数组,整数,浮点数,字符串和数学.其他任何东西都是可选的.

示例实施

这是一个伪代码片段,可以更好地解释这一点.这里一个模块超出了它的内存分配配额,并且还创建了无限递归.

buffer* transcodeToAVI_main( &in_buffer ) {
    int buffer[1000000000]; // allocation exceeding quota
    while(true) {} // infinite loop
    return buffer;
}
Run Code Online (Sandbox Code Playgroud)

这是一个转换版本,我们的预处理器添加了观察点来检查内存使用和递归,并将整个事件包装在异常处理程序中.

buffer* transcodeToAVI_main( &in_buffer ) {
    try {
        core_funcStart(__FILE__,__FUNC__); // tell core we're executing this function
        buffer = …
Run Code Online (Sandbox Code Playgroud)

c sandbox

36
推荐指数
5
解决办法
1万
查看次数

请求已中止:无法创建SSL/TLS安全通道沙箱帐户

它在一周之前运作良好,但现在它显示以下错误.我尝试过以下的东西,但没有用.

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
Run Code Online (Sandbox Code Playgroud)

所以建议我可能的解决方案

public string HttpCall(string NvpRequest) //CallNvpServer
    {
        string url = pendpointurl;

        //To Add the credentials from the profile
        string strPost = NvpRequest + "&" + buildCredentialsNVPString();
        strPost = strPost + "&BUTTONSOURCE=" + HttpUtility.UrlEncode(BNCode);

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
        // allows for validation of SSL conversations
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
        objRequest.Timeout = Timeout;
        objRequest.Method = "POST";
        objRequest.ContentLength = strPost.Length;

        try
        {
            using (StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream()))
            {
                myWriter.Write(strPost); …
Run Code Online (Sandbox Code Playgroud)

.net paypal sandbox

36
推荐指数
3
解决办法
5万
查看次数

Lua的能力:有什么经验?

关于Lua和Javascript是否支持对象能力模型,cap-talk邮件列表上进行了一些讨论,得出的结论是,由于支持将环境限制为被调用函数setfenv,以及对不可变对象进行不可伪造引用的可能性,OCM可能是实现.

我们看过这个怎么样了?我有兴趣从现有应用程序中删除漏洞,在Lua中使用非常有用的,慷慨的脚本支持,遗憾的是在各种情况下允许完全shell访问.需要一些shell访问:对象能力模型似乎是管理事物的好方法.但是我担心一个案例我可以说是多么令人信服,这种方法实际上可以确保在确定的混乱实践中是安全的.

一些链接:

  1. 更老的问题:如何创建安全的Lua沙箱?
  2. erights.org的背景:从对象到功能
  3. Lua wiki:SandBoxesReadOnlyTables - 显示setfenv在行动; 显示表格背后的基本思想,在适当的情况下,可以只读

security lua sandbox environment-variables capability

35
推荐指数
1
解决办法
2373
查看次数

ScriptedSandbox64.exe已停止工作 - Visual Studio 2015

这是我第二次在Visual Studio 2015中看到错误"Scripted Sandbox64.exe已停止工作".

在我的特定情况下,我正在构建Windows窗体应用程序,并将应用程序放入Windows中的系统托盘中.此应用程序还使用System.IO写入文件.该项目只有这一点.Visual Studio 2015社区版崩溃.

在此输入图像描述

debugging sandbox visual-studio-2015 diagnostic-tools

34
推荐指数
2
解决办法
3万
查看次数