安全运行用户代码

2023-11-29

我希望创建一个人工智能环境,用户可以在其中提交自己的人工智能代码并让他们竞争。语言可以是任何语言,但最好是易于学习的语言,例如 JavaScript 或 Python。

基本上我看到三个选项和几个变体:

  1. 创建我自己的语言,例如一个 JavaScript 克隆,仅具有非常基本的功能,如变量、循环、条件、数组等。这是一个lot如果我想正确实现公共语言功能,这是一项工作。

    1.1 采用现有语言并剥离其核心。只需从 Python 中删除大量功能,直到只剩下上述功能(变量、条件等)。还有很多工作,特别是如果我想跟上上游的最新情况(尽管我也可以忽略上游)。

  2. 使用语言的内置功能来锁定它。我从 PHP 中知道,您可以禁用函数并四处搜索,Python 似乎也存在类似的解决方案(有很多很多警告)。为此,我需要很好地理解该语言的所有功能,并且不要错过任何内容。

    2.1.制作一个预处理器,拒绝含有危险内容的代码(最好基于白名单)。与选项 1 类似,但我只需实现解析器而不是实现所有功能:预处理器必须理解语言,以便您可以拥有名为“eval”的变量,但不能调用名为“eval”的函数。虽然还有很多工作要做,但比选项 1 更易于管理。

    2.2.在非常锁定的环境中运行代码。 Chroot,没有不必要的权限......也许在虚拟机或容器中。从这个意义上来说。我必须研究如何实现这一目标以及如何让它以安全的方式给我结果,但这似乎是可行的。

  3. 手动阅读所有代码。可以小规模或与主持人一起使用,尽管仍然乏味且容易出错(我可能会错过类似的东西if (user.id = 0)).

我想象 2.2 的工作方式是这样的:在虚拟机(或其他东西)中运行两个 AI,并限制它只与主机通信(没有其他互联网或 LAN 访问)。两个人工智能都在单独的机器上运行,并通过在主机上运行的 API 相互通信(好吧,通过比赛场地,从而它们可以看到彼此的位置)。

选项 2.2 似乎是最可行的,但也相对 hacky...我让某人的代码在虚拟化或锁定的环境中松散,希望这能让他们留在其中,同时为他们提供免费游戏以进行 DoS 或突破环境。话又说回来,大多数其他选择也好不了多少。


TL;DR:本质上我的问题是:我如何让人们给我人工智能的“逻辑”(我认为使用代码最容易完成),然后在不影响系统功能的情况下运行它?必须有至少 2 个 AI 在同一个比赛场地上工作。


这实际上只是一个插件系统,因此研究其他人如何实现插件是一个很好的起点。我特别关注 Chrome 和 Safari 等网络浏览器及其插件系统。

现代插件系统的一个共同主题是进程隔离。理想情况下,您应该在沙箱中自己的进程空间中运行该插件。在 OS X 中看看 XPC,它是专门为这个问题而设计的。在 Linux(或更便携)上,我可能会考虑 NaCl(本机客户端)。 JVM 还旨在提供沙箱,并提供丰富的语言选择。 (也就是说,我个人并不认为 JVM 是一个非常强大的沙箱。它有安全问题的历史。)

一般来说,我对此类项目的偏好是与语言无关的 API。我最常使用 REST API(或“类似 REST”)。这使得插件受到高度限制,同时不限制语言选择。我喜欢尽可能使用简单的 HTTP 进行通信,因为它对多种语言都有丰富的支持,因此对插件的限制很少。事实上,根据您的描述,您甚至不必在硬件上运行该插件(当然不在主服务器上)。使插件成为远程客户端可以消除许多潜在的问题。

但最终,我认为像你的“2.2”这样的东西是正确的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全运行用户代码 的相关文章

  • 此 JavaScript 如何在 Firefox 中打开 Windows 设置?

    新安装 Firefox 45 开发版后 我看到了这个页面 它有一个按钮 让我们开始吧 单击该按钮时 会以某种方式打开选择默认应用程序Windows 10 中的设置页面 这是怎么做到的 我无法通过开发者控制台在该页面上迷宫般的代码中找到任何内
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • 在没有默认 java.policy 文件的情况下运行 Java 安全管理器

    我不想修改 java 主目录中的任何内容 但是 我担心有时我的默认 java policy 文件可能过于宽松 当我使用以下命令运行 java 时 有没有办法使用指定的策略文件作为唯一的策略文件 Djava security manager
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • SSL 和会话劫持/固定

    快问 SSL 是否完全防止会话劫持 固定 谢谢 不可以 例如 在以下情况下可能会发生劫持 被黑客入侵的 CA 根签署无效证书 该证书可用于发起中间人攻击 被黑客攻击的域名所有者电子邮件收件箱使黑客有可能购买经过域名验证的证书 错误的密钥策略
  • 如何将 DataFrame 作为输入传递给 Spark UDF?

    我有一个数据框 我想对每一行应用一个函数 该函数依赖于其他数据帧 简化的例子 我有如下三个数据框 df sc parallelize a b 1 c d 3 toDF feat1 feat2 value df other 1 sc para
  • 新标签页和浏览器窗口中的 CSRF 令牌

    我通过以下方式在我的nodejs服务器上实现了CSRF攻击预防 登录时的用户会收到 CSRF 令牌和 cookie 存储在 cookie 中的基于 JWT 的令牌 CSRF 令牌将成为客户端发送的所有未来请求标头的一部分 ajaxSetup
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • 强化文件中的跨站脚本

    我在控制器中有以下代码 参数 base64String fileName 是从浏览器发送的 var fileContent Convert FromBase64String base64String return File fileCont
  • 如何在 Spring-Security 中重命名表 persist_logins

    Spring Security 中管理 记住我 身份验证的默认表名称是 persistent logins 由于数据库命名约定 我需要重命名该表 持久登录 to T PERSISTENT LOGINS 请提供任何帮助 您需要编写自己的实现J
  • 对文本变量进行数学求和? (例如 5865/100 )

    我有一个变量是 whatever 5865 100 这是一个文本变量 我希望它计算 5865 100 以便我可以将其添加到其他数字并进行计算 Number format 不起作用 因为它只返回 5 865 而我希望它返回 58 65 我可以
  • Spring安全盐

    我试图在添加新用户 密码时添加盐 但文档似乎缺少如何执行此操作 这是一个基本示例
  • 如何让用户以 root 权限运行脚本?

    鉴于SUID shell 脚本的危险 http www drdobbs com dangers of suid shell scripts 199101190 是否有更安全的方法可以在 Linux 中以 root 权限对脚本 bash PH
  • 如何指定 JBoss AS7 中的 Web 应用程序使用哪个安全域?

    我正在使用 JBoss AS7 JSF 2 1 我正在尝试使用数据库登录模块对我的 Web 应用程序中特定资源的用户进行身份验证 在standalone xml中有3个安全域 other jboss web policy 和 jboss e
  • PHP 中的 MD5 替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 .Net (C#) 在 Windows 中安全地存储 AES 密钥?

    我一直在寻找一种方法来存储给定的 AES 密钥 以便无法检索它 但它仍然可以用于加密和解密 使用 C 我认为可以找到非对称密钥存储的等效项here http msdn microsoft com en us library tswxhw92
  • 如何编写一个也接受字符输入的 NES 函数?

    我正在开发一个将字符串作为函数参数的 R 包 现在我想使用非标准评估来允许非字符串输入 另外 为了保持向后兼容性 我想保留函数接受字符串的可能性 哈德利给出了example https cran r project org web pack
  • 为什么 eval 无法访问 with 语句下的作用域变量?

    Why你不能使用访问作用域变量吗eval在一个with陈述 例如 function obj with obj console log a prints out obj a eval console log a ReferenceError
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提

随机推荐

  • Haskell 中通过 unsafePerformIO 的全局变量

    GHC API 要求在调用之前进行一些初始化 具体来说 parseStaticFlags只能调用一次 我有可以调用的函数runGhc MaybeFilePath Ghc a gt IO a多次运行某些 GHC API 方法 然而 某些初始化
  • 两个不同时区的时差

    我想获取当前时间 即 IST 和存储在 DB EST 中的时间之差 为此 我尝试在计算差异之前将当前时间转换为东部时间 但它不起作用 在下面的方法中 当地时间不会仅转换为 EST 您能建议我更好的方法吗 返回类型为getModifiedDa
  • 如何从url中获取参数?

    我有一个像这样的网址 http localhost 8080 steer trip create 3 在哪里 在我的页面中 我想使用 jquery 获取值 3 请帮我 From 根据位置突出显示按钮 var pathname window
  • 连续多次转换未按预期工作[重复]

    这个问题在这里已经有答案了 根据我的理解 强制转换用于将值从一种类型转换为另一种类型 我在 Joshua Bloch 和 Neal Gafter 所著的 Java Puzzlers Traps Pitfalls and Corner Cas
  • PHP 分割/分解字符串

    我想在 PHP 中分割 分解一个字符串 该字符串如下所示 strong Label strong p Value p 得到这个结果 array strong Label strong p Value p 我怎样才能做到这一点 你可以这样做
  • PyObjC“此应用程序不允许通知”

    我正在尝试测试一个简单的 Python 脚本来发送 macOS 通知 import UserNotifications def notif callback err print Error in notification callback
  • facebook 登录错误,IOS 9,Swift

    我正在尝试在我的应用程序中实现 Facebook 登录 但出现错误 我的 info plist 代码是
  • 如何更改 Vagrant“默认”机器名称?

    启动 vagrant box 时名称 default 从何而来 vagrant up Bringing machine default up with virtualbox provider 有办法设置这个吗 我发现多个选项令人困惑 因此我
  • 冒泡排序与选择排序的效率

    我知道冒泡排序和选择排序的大 O 值是相同的 n 2 但是当我尝试使用大小为 1000 的数组运行两者时 冒泡排序需要 962037 次交换来对数组进行排序 而选择排序Sort 只需要 988 次交换即可对数组进行排序 为什么这些不同 因为
  • 当 np.nan 设置为默认值时,为什么 np.select 返回 'nan' 作为字符串而不是 np.nan ?

    我在用np select根据应用于其他列的多个条件创建新列 这是一个简单的例子 df pd DataFrame A 0 3 4 B 10 0 2 mask1 df A 0 mask2 df A 4 df df assign C np sel
  • 在 FTP 服务器上重命名文件时出现“(553) 文件名不允许”

    在我的应用程序中 我在 FTP 服务器的一个目录中拥有文件 并将该文件源移动到目标路径 在此过程中 当我移动选定的源文件时 该源文件不会显示在源路径中 它将仅显示在目标路径中 我尝试了下面的代码 但出现错误 string sourceurl
  • iso-8859 和 iso-8859-1 之间的区别,

    iso 8859支持拉丁字符吗我需要在java程序中使用iso 8859 1来读取中文字符文件 这有什么区别 ISO 8859 是 8 位字符编码的标准 8 位给你 256 种组合 这对于大多数拉丁字母的扩展来说是可以的 但对于中文字符来说
  • 合并 ES6 地图/集的最简单方法?

    有没有一种简单的方法可以将 ES6 地图合并在一起 例如Object assign 当我们讨论这个问题时 ES6 Sets 怎么样 比如Array concat 对于套装 var merged new Set set1 set2 set3
  • Spring获取当前的ApplicationContext

    我正在为我的 Web 应用程序使用 Spring MVC 我的豆子写在 spring servlet xml file 现在我有课MyClass我想使用 spring bean 访问这个类 In the spring servlet xml
  • ListView中自定义ArrayAdapter的自定义过滤

    我写了一个自己的ArrayAdapter 如下所示 public class PoiListAdapter extends ArrayAdapter
  • 如何使用OnClick事件调用JS函数[重复]

    这个问题在这里已经有答案了 我正在尝试调用我在标头中添加的 JS 函数 请在下面找到显示我的问题场景的代码 注意 我无权访问我的应用程序中的正文 每次我点击该元素时id Save 它只调用f1 但不是fun 我怎样才能让它呼叫我的fun
  • Azure 存储模拟器是否支持文件共享?

    我正在运行 Azure 存储模拟器 但它目前看起来 从 v5 6 0 0 开始 仅支持 Blob 队列和表存储 BlobEndpoint http 127 0 0 1 10000 QueueEndpoint http 127 0 0 1 1
  • 您好,我正在使用 Quickblox API 在我的应用程序中聊天。但我有与密码长度相关的问题

    您好 我正在使用 Quickblox API 在我的应用程序中聊天 但我有与密码长度相关的问题 我想设置最小密码长度为5 默认情况下 其最小长度为 8 ios 中可以使用 Quickblox 设置密码长度 5 吗 如果可能的话给我正确的解决
  • 网页的功能是什么:在MVC 3 web.config中启用

    我刚刚开始一个新的 MVC 3 项目 谁能告诉我什么
  • 安全运行用户代码

    我希望创建一个人工智能环境 用户可以在其中提交自己的人工智能代码并让他们竞争 语言可以是任何语言 但最好是易于学习的语言 例如 JavaScript 或 Python 基本上我看到三个选项和几个变体 创建我自己的语言 例如一个 JavaSc