代码之家  ›  专栏  ›  技术社区  ›  bzs

斯芬克斯医生的快速搜索功能在詹金斯身上不起作用[复制]

  •  0
  • bzs  · 技术社区  · 7 年前

    但我的问题是我的纯角度JS应用程序中根本没有iFrame。当我在本地机器上运行它时,它工作正常。

    当我将其部署到服务器时,Chrome会显示此错误消息以及以下错误:

    拒绝加载样式“bootstrap.min.css”,因为它违反了 遵循内容安全策略指令:“style src'self'”。

    '仪表板.html' 因为文档的框架是沙盒,并且“允许脚本” 未设置权限。

    顺便说一下,我使用的是非常旧的Chrome(26)和Firefox(10)[组织限制]。在IE11上也会发生这种情况(尽管没有显示错误消息),但页面没有加载。

    这是什么原因?我有什么遗漏吗?任何指点都非常感谢。

    下面是我要做的事情的快照。。。把一些琐碎的部分修剪掉。。

    <html lang="en" ng-app="dashboard">
       <head>
          <title>Dashboard</title>
          <link href="css/bootstrap.min.css" rel="stylesheet">
          <script src="js/jquery.min.js"></script>
          <script src="js/angular.min.js"></script>
          <script src="js/ui-bootstrap-tpls-0.6.0.js"></script>
          <script src="js/bootstrap.min.js"></script>
          <script src="js/notifications.js"></script>
          <style>
             body { background-color: #F3F3F4; color: #676a6c; font-size: 13px;}
          </style>
          <script>
             var dashboardApp = angular.module('dashboard', ['ui.bootstrap', 'notificationHelper']);
    
             Type = {
                APP : 0, CTL : 1
             }
    
    
             function DashboardCtrl($scope, $location, $timeout, $http, $log, $q) {
                $scope.environments = [ { ... }];
                $scope.columns = [ { ... } ];
    
                 $scope.Type = window.Type;
                $scope.applications = [{ ... }];
    
                $scope.selectedEnv = null;
    
                var resetModel = function(applications) {
                    applications.forEach(function(app) {
                         var hosts=$scope.findHosts(app, $scope.selectedEnv);
                         if(hosts){
                             hosts.forEach(function(host){
                                 $scope.initStatus(app.status,host);
                             });
                         }
                    });
                };
    
                var timeoutPromise = null;
    
                 $scope.initStatus = function (status,host) {
                     status[host]=[{
                         ...
                     }];
    
                 };             
             }
    
          </script>
       </head>
       <body ng-controller="DashboardCtrl">
          <div class="request-notifications" ng-notifications></div>
          <div>
             <tabset>
                <tab ng-repeat="env in environments" heading="{{env.name}}" select="set(env)" active="env.tab_active">
                   <div class="col-md-6" ng-repeat="column in columns" ng-class="{'vertical-seperator':$first}">
                      <div class="panel" ng-class="{'first-child':$first}">
                         <div class="panel-heading">
                            <h3>{{column.column}}</h3>
                         </div>
                         <div class="panel-body">
                            <div class="frontends" ng-repeat="layer in column.layers">
                               <h4>{{layer.name}}</h4>
                               <div class="category" ng-repeat="category in layer.categories" ng-class="category.css">
                                  <div class="category-heading">
                                     <h4>{{category.name}}</h4>
                                  </div>
                                  <div class="category-body group" ng-repeat="group in category.groups">
                                     <div ng-if="!env[group.host]">
                                        <h4>{{group.name}}</h4>
                                        <span class="label label-danger">Not deployed</span>
                                     </div>
                                     <div ng-repeat="host in env[group.host]">
                                        <div class="group-info">
                                           <div class="group-name">{{group.name}}</div>
                                           <div class="group-node"><strong>Node : </strong>{{host}}</div>
                                        </div>
                                        <table class="table table-striped">
                                           <thead>
                                              <tr>
                                                 ...
                                              </tr>
                                           </thead>
                                           <tbody>
                                              <tr class="testStatusPage" ng-repeat="app in apps | filter: { column: column.column, layer: layer.name, category: category.name, group: group.name } : true">
                                                 <!-- Application Home Links -->
                                                 <td class="user-link" ng-if="app.type === Type.A || app.type === Type.A1 || app.type === Type.B || app.type === Type.B1 || app.type === Type.C"><a href="{{app.link}}">{{app.text}}</a></td>                                                                                          <td ng-if="app.status[host].statusCode == 0" class="result statusResult"><span class="label label-success">Success</span></td>
                                                 <td ng-if="app.status[svr].status != null && app.status[host].status != 0" class="result statusResult"><span class="label label-danger">{{app.status[host].error}}</span></td>
                                              </tr>
                                           </tbody>
                                        </table>
                                     </div>
                                  </div>
                               </div>
                            </div>
                         </div>
                      </div>
                   </div>
                </tab>
             </tabset>
          </div>
       </body>
    </html>
    
    0 回复  |  直到 7 年前
        1
  •  48
  •   Nick Grealy    9 年前

    我们在Jenkins用户内容目录中使用了这个内容HTML。我们最近升级到了最新的Jenkins 1.625 LTS版本,似乎他们引入了新的内容安全策略,将下面的标题添加到响应标题中,浏览器只是拒绝执行样式表/Javascripts之类的操作。

    X-Content-Security-Policy: sandbox; default-src 'none'; img-src 'self'; style-src 'self';
    

    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
    

    升级到Jenkins 1.625并使用userContent文件夹的用户可能会受到此更改的影响。

    有关详细信息,请参阅 https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy

        2
  •  27
  •   Noam Manos wim    7 年前

    我也有同样的问题 HTML Publisher Plugin .

    Content Security Policy ,可以通过设置绕过它:

    更新: 出于某些原因,在Jenkins 2.x上,我不得不再次更新参数,使用空的CSP值,而不是 脚本src'unsafe inline ,为了完全显示外部HTML页面:

    在窗户上有一个 詹金斯.xml 在Jenkins主目录中,可以设置全局JVM选项,例如Jenkins系统属性。只需将其添加到arguments标记下:

    <arguments> -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle "-Dhudson.model.DirectoryBrowserSupport.CSP= " -jar "%BASE%\jenkins.war" --httpPort=8080 </arguments>

    詹金斯 内部文件:

    /etc/违约/詹金斯 (或詹金斯oc)

    詹金斯爪哇语选项 内部文件:

    (或詹金斯oc)

    请参阅“内容安全策略参考”中的更多示例: http://content-security-policy.com/

        3
  •  22
  •   Ronak Jain    7 年前

    解决方案需要遵循以下步骤:

    1. 打开詹金主页。
    2. 去管理詹金斯。
    3. 现在转到脚本控制台。
    4. 然后在控制台中粘贴下面的语句并单击Run。 System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”,”)
    5. 之后它将加载css和js。

        4
  •  9
  •   Nakilon earlonrails    7 年前

    对于在Ubuntu上托管的Jenkins:

    1. /etc/default/jenkins

      JAVA_ARGS="${JAVA_ARGS} -Dhudson.model.DirectoryBrowserSupport.CSP=\"\" "
      
    2. 参观 http://<your jenkins hostname>/safeRestart

    (关于此选项和其他选项: https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties

    UPD:这次我这么做的时候,访问/安全重启是不够的。我不得不这么做 sudo service jenkins restart .

        5
  •  3
  •   Kiran    9 年前

    上面的答案在Ubuntu16.04和Jenkins 2.46.2中不适用。我不得不将/etc/default/jenkins中的JAVA_ARGS改为

    JAVA_ARGS="-Djava.awt.headless=true  -Dmail.smtp.starttls.enable=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"sandbox allow-scripts; style-src 'unsafe-inline' *;script-src 'unsafe-inline' *;\""
    

    here

        6
  •  0
  •   TimP    9 年前

    在Amazon Linux的底部 /etc/sysconfig/jenkins 更改:

    #JENKINS_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=sandbox"
    
    JENKINS_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=\"\""