如何禁用Jenkins的CSRF防护?或解决Bitbucket触发流水线403问题
解决方案
一、无需禁用CSRF的推荐方案(更安全)
禁用CSRF会降低Jenkins的安全性,优先采用以下两种合规方式:
1. 使用Generic Webhook Trigger插件
- 安装插件:进入Jenkins插件管理页面,搜索并安装
Generic Webhook Trigger插件 - 配置流水线:
- 打开目标流水线的配置页,在
Build Triggers区域勾选Generic Webhook Trigger - 设置
Token字段为自定义令牌(例如MY_BUILD_TOKEN) - 将Bitbucket的webhook URL设置为:
http://<jenkins_URL>/generic-webhook-trigger/invoke?token=MY_BUILD_TOKEN - 保存配置后,Bitbucket推送代码时即可自动触发流水线,该插件会自动处理CSRF校验逻辑
- 打开目标流水线的配置页,在
2. 携带合法Crumb发起Webhook请求
- 获取Jenkins Crumb:
- 使用管理员账号访问
http://<jenkins_URL>/crumbIssuer/api/json,返回的JSON包含crumb和crumbRequestField字段,示例:{"_class":"hudson.security.csrf.DefaultCrumbIssuer","crumb":"abcdef123456","crumbRequestField":"Jenkins-Crumb"} - 在Bitbucket的webhook设置中,添加请求头:
Jenkins-Crumb: abcdef123456(替换为实际获取的crumb值) - 保持原webhook URL不变,此时请求会携带合法的CSRF校验信息,可通过Jenkins的权限验证
- 使用管理员账号访问
二、正确禁用CSRF的方法(仅用于测试或低安全场景)
你之前添加系统属性未生效,大概率是配置方式不正确,以下是两种可靠的禁用方式:
1. 修改Jenkins启动参数
- 找到Jenkins的启动配置文件:Windows系统通常为
jenkins.xml,Linux系统可查看/etc/default/jenkins或/etc/sysconfig/jenkins - 在
JAVA_ARGS参数中添加:-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true - 保存配置后完全重启Jenkins服务(需停止并重新启动,而非仅在Jenkins后台重启应用)
2. 通过Groovy脚本控制台禁用
- 访问Jenkins的脚本控制台:
http://<jenkins_URL>/script - 执行以下Groovy脚本:
import hudson.security.csrf.GlobalCrumbIssuerConfiguration import jenkins.model.Jenkins def jenkinsInstance = Jenkins.get() def csrfConfig = GlobalCrumbIssuerConfiguration.get() csrfConfig.setDisableCSRFProtection(true) jenkinsInstance.save() - 执行完成后重启Jenkins,CSRF保护即可被禁用
内容的提问来源于stack exchange,提问作者SkyH0rn
相关产品推荐
相关产品推荐

