繁体   English   中英

将环境变量传递给Fastlane的shell脚本

[英]Passing an environment variable to a shell script from Fastlane

我正在运行Fastlane (iOS的连续构建工具),以便执行自定义shell脚本来解密文件。

这是命令。

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

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

sh "./decrypt.sh mypwd"

有什么建议?

从即时壳牌中扩展

假设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到环境。


从Invoked Script中扩展

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

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


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

最后,抛开:执行此操作的危险方法可能是:

# 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 s将执行(与在参数扩展期间扩展相反 - '${foo}' - 在发生此危险的扩展阶段之后发生) 。

fastlane的具体答案是https://docs.fastlane.tools/advanced/#shell-values

或者,从你的Fastfile中:decrypted decrypted = sh("./decrypt" ENV[ENCRYPTION_P12])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM