【问题标题】:How do you disable Jenkins CSRF with script?如何使用脚本禁用 Jenkins CSRF?
【发布时间】:2019-09-10 20:51:22
【问题描述】:

我在以自动方式禁用 CSRF 保护时遇到问题。我想在 Jenkins Master 启动之前使用 groovy 初始化脚本或仅在属性文件中禁用。我不确定为什么会遇到碎屑问题,我认为这与 K8S / AWS 中暴露的 LB 有关。我正在使用AWS ELB暴露POD及其在Crumb中引起CSRF例外,当我管理Jenkins时,我有时会收到反向代理。

我研究了它说我可以启用扩展代理兼容性或禁用 CSRF 检查的问题。我还没有找到它们所在的 groovy 或配置文件。

我目前的 groovy 初始化脚本如下:

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
        }
    }
},

我不确定我应该设置什么或如何设置这些。

【问题讨论】:

    标签: jenkins groovy


    【解决方案1】:

    如果你真的需要(暂时)禁用 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()
    

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

    【讨论】:

      【解决方案2】:

      当我试图弄清楚或多或少相同的事情时,我偶然发现了这个问题(在我的情况下,我需要知道代理兼容性选项如何映射到 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));
      

      【讨论】:

        【解决方案3】:

        除了禁用CSRF,您只需在请求中添加crumb,这样您就不会再收到该错误。请通过this link 进行操作。请通过this link 获取更多信息。希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-20
          • 1970-01-01
          • 2017-12-03
          • 2022-10-07
          • 2014-11-26
          • 1970-01-01
          • 2023-01-30
          • 1970-01-01
          相关资源
          最近更新 更多