linux下yaml编辑工具,YAML:可能并不是那么完美

9329c4b27bfb

我之前写过为什么将 JSON 用于人类可编辑的配置文件是一个坏主意,今天我们将讨论 YAML 格式的一些常见问题。

默认情况下不安全

YAML 默认是不安全的。加载用户提供的(不可信的)YAML 字符串需要仔细考虑。

!!python/object/apply:os.system

args: ['ls /']

用 print(yaml.load(open('a.yaml'))) 运行它,应该给你这样的东西:

bin   etc   lib    lost+found  opt   root  sbin  tmp  var sys

boot  dev   efi    home        lib64 mnt   proc  run  srv usr

0

许多其他语言(包括 Ruby 和 PHP 1 )默认情况下也不安全(LCTT 译注:这里应该说的是解析 yaml)。在 GitHub 上搜索 yaml.load 会得到惊人的 280 万个结果,而 yaml.safe_load 只能得到 26000 个结果。

提个醒,很多这样的 yaml.load() 都工作的很好,在配置文件中加载 yaml.load() 通常没问题,因为它通常(虽然并不总是!)来自“可靠源”,而且很多都来自静态的 YAML 测试文件。但是,人们还是不禁怀疑在这 280 万个结果中隐藏了多少漏洞。

有人可能会反驳说这不是 YAML 格式的错误,而是那些库实现错误的的问题,但似乎大多数库默认不是安全的(特别是动态语言),所以事实上这是 YAML 的一个问题。

有些人可能会反驳认为修复它就像用 safe_load() 替换 load() 一样容易,但是很多人都没有意识到这个问题,即使你知道它,它也是很容易忘记的事情之一。这是非常糟糕的 API 设计。

可能很难编辑,特别是对于大文件

YAML 文件可能很难编辑,随着文件变大,这个难度会快速增大。

一个很好的例子是 Ruby on Rails 的本地化翻译文件。例如:

en:

formtastic:

labels:

title: "Title"  # Default global value

article:

body: &#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值