如何使用脚本禁用 Jenkins CSRF?

Gra*_*kel 8 groovy jenkins

我在以自动方式禁用 CSRF 保护时遇到问题。我想在 Jenkins Master 启动之前使用 groovy init 脚本或仅在属性文件中禁用。我不确定为什么我会遇到面包屑问题,我认为这与 K8S/AWS 中暴露的 LB 有关。我正在使用 AWS ELB 来公开 pod 并在面包屑中导致 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");
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到有关如何禁用此属性或启用启用代理兼容性属性的参考。

Crumb Algorithm
 Default Crumb Issuer   
        Enable proxy compatibility
Run Code Online (Sandbox Code Playgroud)

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

"hudson-security-csrf-GlobalCrumbIssuerConfiguration": {
    "csrf": {
        "issuer": {
            "value": "0",
            "stapler-class": "hudson.security.csrf.DefaultCrumbIssuer",
            "$class": "hudson.security.csrf.DefaultCrumbIssuer",
            "excludeClientIPFromCrumb": true
        }
    }
},
Run Code Online (Sandbox Code Playgroud)

我不知道我应该如何设置这些。

MKe*_*per 6

如果您确实需要(暂时)禁用 CSRF,则可以使用 groovy 来完成:

import jenkins.model.Jenkins

def instance = Jenkins.instance
instance.setCrumbIssuer(null)
Run Code Online (Sandbox Code Playgroud)

之后应该通过再次设置为默认 CrumbIssuer 再次启用它,如Jenkins Wiki 中所述

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

def instance = Jenkins.instance
instance.setCrumbIssuer(new DefaultCrumbIssuer(true))
instance.save()
Run Code Online (Sandbox Code Playgroud)

注意:之后通过 GUI 设置标志以启用 CSRF 保护是不够的,您还需要检查 crumb 算法。


SV *_*ddy -3

CSRF您可以简单地crumb在请求中添加a ,而不是禁用,这样您就不会再收到该错误了。请通过此链接进行操作。请通过此链接了解更多信息。希望这可以帮助。