首页 > 解决方案 > 我的字符串插值在 Jenkins 管道脚本中是否安全?

问题描述

我指的是这里的链接。下面是我的脚本代码的一部分,它使用用户名和密码进入平台以获取身份验证令牌。

...
...
   environment{
      CRED = credentials("my_cred")
   }
...
...
   sh'''
   token = $(curl --fail -H "Content-Type:application/json" -X POST https://google.com -d 
   \'{"username":"'"$CRED_USR"'","password":"'"$CRED_PSW"'"}\') 
   '''
   //prints in console '{"username":"*****","password":"*****"}'
...
...

如果我只是通过下面,那么它不起作用。我认为在发送之前需要对正文进行字符串化。

"username":CRED_USR,"password":CRED_PSW
or
"username":'$CRED_USR',"password":'$CRED_PSW'

这可行,但它安全吗?

"username":"'$CRED_USR'","password":"'$CRED_PSW'" 
// prints in console '{"username":"*****","password":"*****"}'

有人可以从字符串插值的角度告诉我我的代码是否安全吗?如果没有,请让我知道正确的方法。

标签: jenkinsgroovyjenkins-pipelinejenkins-groovy

解决方案


它不安全,因为当您在 groovy 级别上插入密码时,它可能会出现在日志中,并且有权访问日志的人可以看到密码。

这应该工作:

environment{
   CRED_USR = ...
   CRED_PSW = ...
}
...

sh '''
    curl ... '{"username":"$CRED_USR","password":"$CRED_PSW"}' ... 
'''

推荐阅读