运维开发网

你怎么能强迫Twitter的Scala Eval来防止注入代码?我想限制Eval指定配置参数

运维开发网 https://www.qedev.com 2020-06-15 10:22 出处:网络 作者:运维开发网整理
我喜欢配置“代码作为数据”的想法,因为从案例类获得的验证与配置文件所需的验证相同. Twitter写了一个很好的Eval实用程序,使这很容易( https://github.com/twitter/util).我想允许用户将配置文件上传到远程服务.这开辟了为我的远程服务注入代码的潜力. 例如,如果我有以下配置案例类: case class MyConfig(param1: String) 我希望用
我喜欢配置“代码作为数据”的想法,因为从案例类获得的验证与配置文件所需的验证相同. Twitter写了一个很好的Eval实用程序,使这很容易( https://github.com/twitter/util).我想允许用户将配置文件上传到远程服务.这开辟了为我的远程服务注入代码的潜力.

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

case class MyConfig(param1: String)

我希望用户能够上传包含命令的文件:

MyConfig(param1 = "My Param Value")

…但不是包含命令的文件:

MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})

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

人们可以添加危险代码而无需导入包;发出rm …命令需要多少行代码?

最好的解决方案是不让人们发送配置代码;只需使用XML解析器等.唯一真正安全的替代方案是自己解析上传,并将其与允许使用的严格的关键字白名单(和引用的字符串)进行比较.到目前为止,你只有一半的时间来编写自己的解释器并且仍然容易受到很多错误的影响,因此解析文本文件看起来就像是懒惰的选项以及安全的选择.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号