【问题标题】:Safe implementation strategy for embedded user-defined expressions嵌入式用户定义表达式的安全实现策略
【发布时间】:2017-04-03 05:19:25
【问题描述】:

至少目前,我正在用 Python 设计/制作一种领域特定语言的原型。设计很简单 - 但需要支持指定任意函数(其域是从标签到整数的映射 - 范围是整数。)在许多情况下,该函数将仅在域中选择一个标签以产生一个结果...但我想允许规范任何可以用通用编程语言轻松(有效)实现的功能。

需要注意的是,我希望函数“安全”...我的意思是:

  • “纯”功能:确定性且无副作用。 (即没有外部状态;没有与文件、I/O、设备等交互)
  • 终止 - 成功或在特定(小规模)分配的计算资源到期后。

我很希望这个功能应该被有效地实现——我希望不经常提供定义——并且非常频繁地进行评估。我还希望使用熟悉的语法来定义函数。

我考虑过支持在 python 中实现函数...我知道我可以impose restrictions using the eval() function,并且我找到了AST module - 建议一种方法涉及解析为 AST,然后解释 (或在评估之前验证)AST 树。我还阅读了有关 pyparse 的信息,并考虑实施一种定制的、解释性的语言。

我不禁认为,试图阻止来自 eval() 的不良行为是在“向后”解决问题(试图在事后阻止不良功能),而实施定制语言将涉及重新发明轮子.

Python 是否已经有了安全、高效、可嵌入的表达式解释器?

【问题讨论】:

    标签: python functional-programming interpreter dsl


    【解决方案1】:

    PyPy has a sandbox.

    如果您在 Web 浏览器中运行它(不可信代码问题的常见位置),请考虑使用类似 Brython 的东西在客户端运行它。没有人关心用户是否入侵了自己的机器。

    如果您确实实现了定制解释器,则不必重新实现 所有 轮子。在不受信任的代码上使用compile() 被认为是相对安全的,但要注意消耗时间和内存的大常量。在您可以杀死的单独进程中运行编译器。然后,您只需要编写一个无法访问任何重要内容的 Python 字节码解释器。

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      相关资源
      最近更新 更多