Jenkins里的Crumb

Crumb的作用

CSRF Protection

首先解释一下CSRF,Cross-Site Request Forgery(CSRF或XSRF)跨站请求伪造,是一种web安全漏洞。如果没有CSRF保护,Jenkins的admin访问其他网站,将允许这个网站对Jenkins执行操作,导致Jenkins受害。

Jenkins 中的 CSRF 保护

Jenkins的CSRF保护使用token(在Jenkins里叫crumb),它由Jenkins创建,并发送给用户。任何导致修改的表单提交或者类似的操作,比如:触发任务或修改构建配置,都需要提供Crumb。crumb 包含标识创建它的用户的信息,因此使用另一个用户的token提交将被拒绝。

设置CSRF保护

Manage Jenkins » Configure Global Security » CSRF Protection 中,管理员可以配置 CSRF Protection。

在这里插入图片描述

默认的Crumb Issuer,生成crumb的哈希,并在其中编码以下的信息

  • 为其生成crumb的用户名
  • 生成crumb的网络会话 ID
  • 为其生成crumb的用户的 IP 地址
  • 此 Jenkins 实例独有的salt

当面包屑被发送回 Jenkins 时,所有这些信息都需要匹配,以便该提交被视为有效。

在脚本里使用

发给Jenkins的POST请求通常需要提供crumb。这也适用于使用用户名和密码进行身份验证的脚本客户端。由于 crumb 包含网络会话 ID,客户端需要执行以下操作:

  • /crumbIssuer/api 发送请求,请求面包屑。注意 Set-Cookie响应头
  • 对于所有后续请求,除了用户名和密码之外,还提供 crumb 和会话 cookie。

或者使用用户名和 API Token 进行身份验证。
使用API Token的话,即使Jenkins打开了CSRF保护,也不需要提供crumb

猜你喜欢

转载自blog.csdn.net/zjxht62/article/details/118164376