scala - 如何强制 Twitter 的 Scala Eval 阻止注入(inject)代码?我想限制 Eval 指定配置参数

标签 scala twitter eval

我喜欢用于配置的“代码即数据”的想法,因为您从案例类中获得的验证与您想要对配置文件进行的验证相同。 Twitter 编写了一个很好的 Eval 实用程序,使这变得简单 (https://github.com/twitter/util)。我想允许用户将配置文件上传到远程服务。这开启了针对我的远程服务注入(inject)代码的可能性。

例如,如果我有以下配置案例类:

case class MyConfig(param1: String)

我希望用户能够上传包含命令的文件:
MyConfig(param1 = "My Param Value")

...但不是包含命令的文件:
MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})

有没有办法拦截编译以确保没有调用任何函数?

最佳答案

人们可以在不导入包的情况下添加危险代码;发出 rm ... 命令需要多少行代码?

最好的解决方案是不要让人们发送代码进行配置;只需使用 XML 解析器或类似的东西。唯一真正安全的选择是自己解析上传并将其与允许使用的关键字(和引用的字符串)的严格白名单进行比较。至此,您已经完成了编写自己的解释器的一半,但仍然容易出错,因此解析文本文件开始看起来既是一种懒惰的选择,也是一种安全的选择。

关于scala - 如何强制 Twitter 的 Scala Eval 阻止注入(inject)代码?我想限制 Eval 指定配置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035278/

相关文章:

java - 为什么此代码中会出现 "value X is not a member of Y"错误?

ios - 使用 Twitter 在 iPhone 中登录用户并将经过身份验证的用户保存到远程 Django 应用程序

Matlab 函数处理工作区恶作剧

c# - C# 中的 Twitter 服务代理

javascript - 我无法检查评估的变量是否处于未定义状态

r - 嵌套的 `eval` 的环境和外壳是什么?

ruby - 在 Scala 中查找 'tidy numbers'

scala - Spark配置: SPARK_MEM vs. SPARK_WORKER_MEMORY

java - 高性能并发 MultiMap Java/Scala

scala - 如何提高使用 Spark-xml 加载大型 XML 文件的并行度?