gpt4 book ai didi

ruby - 从 FaSTLane 将环境变量传递给 shell 脚本

转载 作者:数据小太阳 更新时间:2023-10-29 07:10:20 28 4
gpt4 key购买 nike

我在跑 Fastlane (适用于 iOS 的持续构建工具)以执行用于解密文件的自定义 shell 脚本。

这是命令。

sh "./decrypt.sh ENV['ENCRYPTION_P12']"

我想不出将环境变量传递给该脚本的方法。显然,如果我将密码硬编码到脚本中,它就可以正常工作。

sh "./decrypt.sh mypwd"

有什么建议吗?

最佳答案

从直接 Shell 中扩展

假设这里的 sh 是一个 faSTLane 命令,它以给定的参数作为脚本文本调用 shell 命令:

# as a fastlane directive
sh './decrypt.sh "$ENCRYPTION_P12"'

请注意,如果这是作为 /bin/sh 的命令行字面调用,它需要一个 -c 参数:

# in other contexts
sh -c './decrypt.sh "$ENCRYPTION_P12"'

请注意,这完全取决于 ENCRYPTION_P12 是一个环境变量——也就是说,export 由系统设置它的环境。


从调用的脚本中扩展

也就是说,如果它一个环境变量,您有一个更好的选择:直接使用它。

也就是说,在decrypt.sh中,你可以引用"$ENCRYPTION_P12"而不需要显式设置它,因为shell隐式地将所有环境变量导入为shell变量——并且它们被传递给子进程,而不需要任何明确的操作。


要避免的事情:Shell 注入(inject)攻击

最后,题外话:这样做的危险方法是这样的:

# INSECURE: DO NOT DO THIS
sh "./decrypt.sh #{ENV['ENCRYPTION_P12']}"

# STILL INSECURE
sh "./decrypt.sh \"#{ENV['ENCRYPTION_P12'}\""

# STILL INSECURE
sh "./decrypt.sh '#{ENV['ENCRYPTION_P12'}'"

...从而在 Ruby 级别将值替换为您生成的字符串。然而,这是危险的,因为该字符串被解析为代码——这意味着 ENCRYPTION_P12 的内容可能会在 shell 攻击中被利用。

例如,考虑以下情况(在 bash 语法中给出):

# this will make any of the above do Very Evil Things
ENCRYPTION_P12=$'$(rm -rf ~)\'$(rm -rf ~)\''

...如果直接替换到生成的 shell 脚本中,两个 rm 都将执行(而不是在参数扩展期间扩展 -- '${foo}' -- 这发生在导致这种危险的扩展阶段已经过去之后)。

关于ruby - 从 FaSTLane 将环境变量传递给 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34855316/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com