Lisp 通过删除不需要的库来沙箱欺骗?

Lisp 通过删除不需要的库来沙箱欺骗?,lisp,sandbox,guile,Lisp,Sandbox,Guile,我已经实现了一个非常基本的扩展机制,允许用户在文档中嵌入一段Lisp(Guile)代码,以允许自定义某些函数。目前的用例(我自己的)是,在特定情况下,我只希望某个数字自动除以10 原则上,这意味着如果有人使用我的GUI,其他人可以向他们发送包含恶意欺骗代码形式的特洛伊木马攻击的文档。这在现实中似乎不太可能,因为我的用户群非常小,并且有相关的社会因素,但无论如何,我希望通过沙箱化代码来防止这种情况 Guile 2.2.1有一个沙箱机制:但是,这似乎完全是为了防止过度使用资源(许多用户不会有Guil

我已经实现了一个非常基本的扩展机制,允许用户在文档中嵌入一段Lisp(Guile)代码,以允许自定义某些函数。目前的用例(我自己的)是,在特定情况下,我只希望某个数字自动除以10

原则上,这意味着如果有人使用我的GUI,其他人可以向他们发送包含恶意欺骗代码形式的特洛伊木马攻击的文档。这在现实中似乎不太可能,因为我的用户群非常小,并且有相关的社会因素,但无论如何,我希望通过沙箱化代码来防止这种情况

Guile 2.2.1有一个沙箱机制:但是,这似乎完全是为了防止过度使用资源(许多用户不会有Guile的当前版本,例如,我现在没有)

在解释器启动后,Guile程序中是否可能删除库,例如,以便以后的代码不能执行读取文件之类的操作?如果是这样,那么我可以让我的GUI将沙箱代码预先添加到文档提供的可能不受信任的代码中。我的目标基本上是确保不受信任的代码必须100%没有副作用

似乎其他人以前也遇到过这个问题,因为Guile已经被提升为Linux的标准扩展语言


编辑:在遇到之后,我觉得我可能会创建一个新的作用域,通过设置
覆盖任何危险函数的定义您几乎肯定希望通过构造模块来实现这一点,将程序可以看到的绑定限制为安全的绑定。此外,您还需要处理占用太多时间或空间的程序。这似乎正是Guile sandbox工具提供给您的东西的组合(请注意关于“纯绑定”的东西,这是模块的东西):除非出于某种原因您不能使用足够新的Guile版本,否则我强烈建议您使用它。@tfb:我明白了,谢谢。我根本不明白文档的那部分是在说什么。也许我需要在某个地方找到一个例子来说明某人是如何使用它的。@tfb:除非出于某种原因,您不能使用足够新的Guile版本,否则我强烈建议您使用它。看起来沙盒模块需要Guile 2.2+。这使得我使用它变得不切实际,因为ubuntu在打包方面远远落后,我不能告诉用户他们必须从源代码处编译guile以保护自己免受特洛伊木马攻击。我最终决定不使用guile作为扩展语言,而是使用计算器程序bc。它不是一种功能齐全的编程语言,但总比没有好。你几乎肯定想通过构造模块来实现这一点,将程序可以看到的绑定限制为安全的绑定。此外,您还需要处理占用太多时间或空间的程序。这似乎正是Guile sandbox工具提供给您的东西的组合(请注意关于“纯绑定”的东西,这是模块的东西):除非出于某种原因您不能使用足够新的Guile版本,否则我强烈建议您使用它。@tfb:我明白了,谢谢。我根本不明白文档的那部分是在说什么。也许我需要在某个地方找到一个例子来说明某人是如何使用它的。@tfb:除非出于某种原因,您不能使用足够新的Guile版本,否则我强烈建议您使用它。看起来沙盒模块需要Guile 2.2+。这使得我使用它变得不切实际,因为ubuntu在打包方面远远落后,我不能告诉用户他们必须从源代码处编译guile以保护自己免受特洛伊木马攻击。我最终决定不使用guile作为扩展语言,而是使用计算器程序bc。它不是一种功能齐全的编程语言,但总比没有好。