如何使用脚本禁用Jenkins CSRF?

时间:2018-04-17 23:05:29

标签: jenkins groovy

我遇到了以自动方式禁用CSRF保护的问题。我希望在Jenkins Master Starts之前使用groovy init脚本或仅在属性文件中禁用。我不确定为什么我会遇到碎屑问题,我认为它与K8S / AWS中暴露的LB有关。我正在使用AWS ELB来公开pod及其在crumb中导致csrf异常,并且当我转到管理Jenkins时,我也会收到反向代理警告。

我研究过它说我可以启用扩展代理兼容性或禁用CSRF检查的问题。我还没有找到这些生活的groovy或配置文件。

我当前的groovy init脚本如下:

import hudson.security.csrf.DefaultCrumbIssuer
import jenkins.model.Jenkins

def j = Jenkins.instance;
j.setCrumbIssuer(null); // I've also tried setting a new crumb issuer here as well.
j.save();
System.setProperty("hudson.security.csrf.CrumbFilter", "false");
System.setProperty("hudson.security.csrf", "false");
System.setProperty("hudson.security.csrf.GlobalCrumbIssuerConfiguration", "false");

我似乎无法找到关于如何禁用此属性或启用“启用代理兼容性”属性的引用。

Crumb Algorithm
 Default Crumb Issuer   
        Enable proxy compatibility

我在单击“应用”时拦截了配置请求,并且传递的json有效负载似乎设置为

"hudson-security-csrf-GlobalCrumbIssuerConfiguration": {
    "csrf": {
        "issuer": {
            "value": "0",
            "stapler-class": "hudson.security.csrf.DefaultCrumbIssuer",
            "$class": "hudson.security.csrf.DefaultCrumbIssuer",
            "excludeClientIPFromCrumb": true
        }
    }
},
我不确定我应该设置这些内容。

3 个答案:

答案 0 :(得分:1)

我偶然发现了这个问题,而我正在试图弄清楚我的头发或多或少相同的东西(在我的情况下,我需要知道代理兼容性选项如何映射到Jenkins的config.xml)。在表单的HTML源代码中,有一些有用的信息(为简洁而截断):

<label>Enable proxy compatibility</label><a helpURL="/descriptor/hudson.security.csrf.DefaultCrumbIssuer/help/excludeClientIPFromCrumb"><img /></a>

excludeClientIPFromCrumbDefaultCrumbIssuer上的构造函数参数,因为javadocs公开:http://javadoc.jenkins-ci.org/hudson/security/csrf/DefaultCrumbIssuer.html。我只需要在config.xml中翻转该值 - 我的困惑源于UI中字段的标签与构造函数参数名称的不同。

对于您的情况,如果您想使用启用了“启用代理兼容性”的默认crumb提供程序启用CSRF保护,则可以在脚本中执行

j.setCrumbIssuer(new DefaultCrumbIssuer(true));

答案 1 :(得分:0)

您可以在请求中添加CSRF,而不是禁用crumb,这样您就不会再遇到错误了。请通过this link进行操作。有关详细信息,请查看this link。希望这会有所帮助。

答案 2 :(得分:0)

如果您真的需要(临时)禁用CSRF,可以使用groovy来完成:

import jenkins.model.Jenkins

def instance = Jenkins.instance
instance.setCrumbIssuer(null)

此后应通过再次设置为Default CrumbIssuer再次启用它 如Jenkins Wiki中所述:

import hudson.security.csrf.DefaultCrumbIssuer
import jenkins.model.Jenkins

def instance = Jenkins.instance
instance.setCrumbIssuer(new DefaultCrumbIssuer(true))
instance.save()

N.B .:仅仅设置标志以通过GUI启用CSRF保护是不够的,您还需要检查屑算法。