问题标签 [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.
iphone - iPhone OS 应用程序可以搜索设备的文件系统吗?
我可以从应用程序中搜索 iPhone 文件系统吗?我需要搜索 iPhone OS 设备并返回 iPhone OS 设备上安装的所有应用程序的列表。我相当了解 Apple 的限制和规则,即关于哪些应用程序可以在沙箱之外执行以及大多数情况下不能执行 - 并且知道除了相册之外,地址簿(通过指定的类)不允许应用程序访问外部的任何内容其主目录(沙箱)的安全性。但界限是模糊的。
无论如何,回到问题: UISearchBarDelegate(或任何其他类/协议)可以让我搜索 iPhone 设备吗?
python - Linux 中的安全 Python 环境
是否可以创建一个环境以在 Linux 下安全地运行任意 Python 脚本?这些脚本应该是从不受信任的人那里收到的,并且可能太大而无法手动检查它们。
一个非常暴力的解决方案是创建一个虚拟机并在每次启动不受信任的脚本后恢复其初始状态。(太贵了。)
我想知道是否可以限制 Python 访问文件系统和与其他程序交互等等。
java - Java 桌面应用程序的局限性?
我来自 C/C++ 背景,现在做了很多 C# 的工作。
最近我开始对用 Java 做一些项目感兴趣,因为我在玩 Android SDK。
我知道 Java 应用程序在沙箱中运行,可以限制它们对系统的访问。
在桌面/服务器应用程序环境中,有哪些限制?
c - 如何创建轻量级 C 代码沙箱?
我想构建一个 C 预处理器/编译器,允许从本地和在线资源收集函数。IE:
那是容易的部分。
困难的部分是我需要一种可靠的方法来“沙箱”导入代码,从直接或不受限制地访问磁盘或系统资源(包括内存分配和堆栈)。我想要一种方法来安全地运行不受信任的 C 代码(模块)的小片段,而无需将它们放在单独的进程、VM 或解释器中(尽管可以接受单独的线程)。
要求
- 我需要为其访问数据和资源(包括 CPU 时间)设置配额。
- 我将阻止直接访问标准库
- 我想阻止产生无限递归的恶意代码
- 我想将静态和动态分配限制为特定限制
- 我想捕获模块可能引发的所有异常(例如除以 0)。
- 模块只能通过核心接口与其他模块交互
- 模块只能通过核心接口与系统(I/O 等)交互
- 模块必须允许位操作、数学、数组、枚举、循环和分支。
- 模块不能使用 ASM
- 我想限制指针和数组访问为模块保留的内存(通过自定义 safe_malloc())
- 必须支持 ANSI C 或子集(见下文)
- 系统必须是轻量级和跨平台的(包括嵌入式系统)。
- 系统必须与 GPL 或 LGPL 兼容。
我很乐意接受 C 的一个子集。我不需要模板或类之类的东西。我主要对高级语言不擅长的事情感兴趣,比如快速数学、位运算以及二进制数据的搜索和处理。
现有的 C 代码可以在不修改的情况下重复使用来创建模块,这并不是意图。目的是要求模块符合一组规则和限制,旨在将模块限制为基本逻辑和转换操作(例如视频转码或压缩操作)。
这种编译器/预处理器的理论输入将是具有 module_main 函数的单个 ANSI C 文件(或安全子集),没有包含或预处理器指令,没有 ASM,它将允许循环、分支、函数调用、指针数学(仅限于分配给模块的范围)、位移、位域、强制转换、枚举、数组、整数、浮点数、字符串和数学。其他任何东西都是可选的。
示例实现
这是一个伪代码片段,可以更好地解释这一点。这里一个模块超出了它的内存分配配额并且还创建了无限递归。
这是一个转换后的版本,我们的预处理器添加了观察点来检查内存使用和递归,并将整个事情包装在异常处理程序中。
我意识到执行这些检查会影响模块性能,但我怀疑它仍然会胜过高级或 VM 语言来解决它打算解决的任务。我并不是想直接阻止模块做危险的事情,我只是想强迫那些危险的事情以可控的方式发生(比如通过用户反馈)。即:“模块 X 已超出其内存分配,继续还是中止?”。
更新
到目前为止,我最好的方法是使用带有边界检查和一些自定义函数和循环代码的自定义编译器(如被黑的 TCC)来捕获递归。我仍然想听听关于我还需要检查什么或有什么解决方案的想法。我想在使用前删除 ASM 并检查指针可以解决下面之前的答案中表达的许多问题。我添加了一个赏金来从 SO 社区中获取更多反馈。
对于我正在寻找的赏金:
- 针对上述理论系统的潜在攻击细节
- 对每次访问检查指针的可能优化
- 概念的实验性开源实现(如 Google Native Client)
- 支持多种操作系统和设备的解决方案(无基于操作系统/硬件的解决方案)
- 支持大多数 C 操作甚至 C++(如果可能的话)的解决方案
可以与 GCC 一起工作的方法(即预处理器或小型GCC 补丁)的额外功劳。
我也会考虑任何能够最终证明我正在尝试的事情根本无法完成的人。不过,您需要非常有说服力,因为到目前为止,没有任何反对意见真正指出了他们认为不可能的技术方面。为那些拒绝的人辩护,这个问题最初是作为安全运行 C++ 的一种方式提出的。我现在已将要求缩减到 C 的有限子集。
我对 C 的理解可以归类为“中级”,我对 PC 硬件的理解可能比“高级”低了一步。如果可以,请尝试指导您针对该级别的答案。由于我不是 C 专家,我将主要基于对答案的投票以及答案与我的要求的接近程度。您可以通过为您的索赔(受访者)和投票(其他所有人)提供充分的证据来提供帮助。一旦赏金倒计时达到 6 小时,我将分配答案。
最后,我相信解决这个问题将是在一个日益网络化和偏执的世界中保持 C 语言相关性的重要一步。随着其他语言在性能方面缩小差距和计算能力的增长,将越来越难以证明 C 开发的额外风险是合理的(就像现在使用 ASM 一样)。我相信您的答案将比获得一些 SO 点具有更大的相关性,因此即使赏金已过期,请尽您所能贡献。
javascript - 沙盒 Javascript
除了 Caja(它是基于 Java 的)之外,是否有一个简单的 javascript 实现用于沙盒 iframe?
python - Linux 中的沙盒
我想创建一个 Web 应用程序,它允许用户上传一些 C 代码,并查看其执行结果(代码将在服务器上编译)。用户不受信任,这显然会带来一些巨大的安全隐患。
所以我需要为应用程序创建某种沙箱。在最基本的层面上,我想将对文件系统的访问限制为某些指定的目录。我不能直接使用 chroot 监狱,因为 Web 应用程序没有以特权用户身份运行。我猜想设置监狱的 suid 可执行文件将是一种选择。
上传的程序会很小,所以它们应该执行得很快(最多几秒钟)。因此,我可以在预设超时后终止该进程,但如何确保它不会产生新进程?或者如果我不能,杀死整个 pgid 是一种可靠的方法吗?
除了“根本不这样做”之外,最好的解决方法是什么?:) 我错过了哪些其他明显的安全问题?
FWIW,网络应用程序将用 Python 编写。
asp.net-mvc - 针对我的 MVC 存储库进行测试的最佳方法是什么?
我已经建立了一个存储库,我想在它上面运行一堆测试,看看函数返回什么。
我正在使用 Visual Studio 2008,我想知道是否有任何沙箱可以玩(无论是否在 Visual Studio 2008 中),或者我是否真的必须构建一个模拟控制器并查看来测试存储库?
谢谢,
马特
apache-flex - 我可以访问最初请求的域之外的跨域文件吗?
Flash Player 10 指定:
“重定向到最初请求的域之外的策略文件将继续导致 Flash Player 忽略策略文件。”
有没有办法访问域外的策略文件?
php - 沙盒网站最佳实践?
我目前在一家几乎没有正式流程和一百万个 PHP 网站的网店工作,其中包括自定义 CMS 和购物车代码等棘手的东西。
我们正在努力改进事情。我正在推动 CVS/SVN。
我的问题是,沙盒网站工作的最佳实践是什么?我们在 LAMP 堆栈上。我们的一些网站已硬编码(或用户输入的链接)到当前域,因此设置不同的域(如 preview.mysite.com)会破坏指向 www.mysite.com 的链接。如果我们开始应用回归测试,也许域应该统一用于测试?这总是可以通过本地主机条目来完成。
因此,考虑到我们有很多站点,最好有一个流程来始终在适当的沙箱中进行预览。想知道这将如何与 SVN/CVS 循环集成。
我只是在寻找行业最佳实践,因为我们正在努力实现这一目标。如果这意味着将站点克隆到额外的服务器,那就这样吧。
iphone - 有没有办法在 iphone 上以编程方式将图像保存为 default.png?
我为 iphone 编写了一个应用程序,我想将其中的图像保存为 default.png 以供下次调用。这可能吗?沙盒似乎不允许您覆盖其本地文件系统中的任何内容。