当前位置: 首页 > 面试题库 >

如何通过JSON / JS在Jenkins中为CSRF添加面包屑

王景山
2023-03-14
问题内容

我想在詹金斯(Jenkins)中通过API作业创建,但无法在詹金斯(Jenkins)中使用CSRF保护。我有一个面包屑,但idk如何将其附加到JSON或JavaScript中的url
/请求上,以通过POST方法获取数据传递。有任何想法吗?我只想使用JS而不使用JAVA。谢谢


问题答案:

它应该很容易。为了在詹金斯获得CSRF,您需要做的事情很少。

#1

提取有效的实际CSRF碎屑,为此应使用“ / crumbIssuer
”端点。AFAIK,这是一个受保护的端点,因此您应该使用API​​令牌或请求中的凭据对它进行身份验证的调用。这里我将如何用JavaScript做到这一点:

// **** - is a placeholder for an auth token, replace it with yours
$.get({
    url: "https://my.jenkins.io/crumbIssuer/api/json",
    contentType: "application/json",
    headers: {
        "User-Agent": "my_js_script",
        "Authorization": "****"
    }
}).done(function(data) {
    // this is how you fetch valid & actual CSRF crumb
    console.log(data.crumbRequestField + " = " + data.crumb);
});

#2

现在,由于您已经处理了有效且实际的CSRF碎屑,因此请与任何修改Jenkins状态的请求一起发送。可以说,有效的CSRF碎屑JSON看起来像这样:

{ "crumbRequestField": "Jenkins-Crumb", "crumb": "noop" }

因此,您的Ajax调用将看起来像这样(请注意一个额外的“ Jenkins-Crumb” HTTP标头):

// **** - is a placeholder for an auth token, replace it with yours
// simply activates a job in Jenkins, requirement for cloned jobs (aka. "Create-A-Copy-From")
$.post({
    url: "https://my.jenkins.io/job/my_job/description",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    headers: {
        "User-Agent": "my_js_script",
        "Authorization": "****",
        "Jenkins-Crumb": "noop" // makes CSRF filter in Jenkins happy
    },
    data: "description="
});

这些JavaScript片段不太可能完美,但希望能为您提供正确的方向。

我正在开发一个Jenkins API库的项目,但是使用Ruby。如果您需要阅读一些实际能满足您需求的源代码,那么以下文件可能是您感兴趣的文件:

  • jenkins-api / lib / jenkins / connection.rb(请参阅“ 滚动方法”);
  • jenkins-api / lib / jenkins / job.rb(请参见“ activate_job”方法);


 类似资料:
  • 问题内容: 按照标题,在Jenkins中,如何使用CLI将新的从属节点添加到构建集群中,或者如果没有CLI选项,是否可以使用另一种脚本化方法? 问题答案: 许多人使用Swarm插件来消除实际手动添加从站的需要。当然,您将需要编写swarm代理的安装脚本,但这应该很简单。

  • 是否有任何插件可以为grails添加动态面包屑。你能举个例子吗?我正在使用grails 3.3.0。以下插件不工作。https://grails.org/plugin/groovy-breadcrumbs-plugin. 我得到以下错误。|错误初始化类路径错误:找不到org.grails.plugins:面包屑:0.5.2。在以下位置搜索:文件:/. m2/repository/org/grail

  • 问题内容: 我有带有输入步骤的Jenkins管道,我想通过脚本提交此输入(单字符串参数)。到目前为止,我正在尝试使用curl,理想情况下,我将通过Python请求库发送它。这应该是一个简单的POST请求,但是使用CSRF变得棘手。我已经获得Jenkins- Crumb(在这种情况下,使用curl是在同一台机器和同一bash会话上进行的),但仍然无法发送内容… 我正在发送标头,就像在https://

  • 我有JSON相同的,如何在combobox加载相同的树使用Sencha Architect。

  • 问题内容: 上面的带有post请求的curl代码在触发Jenkins构建时绝对可以正常工作。 尝试过: http://xxx.yyy.zzz:5555 / bitbucket-hook?token = auth_token&crumb = xyz_crumb http://xxx.yyy.zzz:5555 / job / job-name / build?token = auth_token&cr

  • 问题内容: 如何解析一个JSON文件以检索其所有数据并在我的代码中使用它? 我试过导入文件,只是尝试控制台记录它,但是它所做的只是打印对象{}: 这是我的file.json的样子: 我希望能够访问每个组件的名字和姓氏并将其打印在网站上。 问题答案: https://jsfiddle.net/c9wupvo6/