Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 18:44:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 18:44:42 +0300
commit4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch)
tree5423a1c7516cffe36384133ade12572cf709398d /lib/gitlab/content_security_policy
parente570267f2f6b326480d284e0164a6464ba4081bc (diff)
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'lib/gitlab/content_security_policy')
-rw-r--r--lib/gitlab/content_security_policy/config_loader.rb48
1 files changed, 45 insertions, 3 deletions
diff --git a/lib/gitlab/content_security_policy/config_loader.rb b/lib/gitlab/content_security_policy/config_loader.rb
index ff844645b11..6f6147f0f32 100644
--- a/lib/gitlab/content_security_policy/config_loader.rb
+++ b/lib/gitlab/content_security_policy/config_loader.rb
@@ -8,11 +8,33 @@ module Gitlab
media_src object_src report_uri script_src style_src worker_src).freeze
def self.default_settings_hash
- {
- 'enabled' => false,
+ settings_hash = {
+ 'enabled' => true,
'report_only' => false,
- 'directives' => DIRECTIVES.each_with_object({}) { |directive, hash| hash[directive] = nil }
+ 'directives' => {
+ 'default_src' => "'self'",
+ 'base_uri' => "'self'",
+ 'child_src' => "'none'",
+ 'connect_src' => "'self'",
+ 'font_src' => "'self'",
+ 'form_action' => "'self' https: http:",
+ 'frame_ancestors' => "'self'",
+ 'frame_src' => "'self' https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com",
+ 'img_src' => "'self' data: blob: http: https:",
+ 'manifest_src' => "'self'",
+ 'media_src' => "'self'",
+ 'script_src' => "'strict-dynamic' 'self' 'unsafe-inline' 'unsafe-eval' https://www.recaptcha.net https://apis.google.com",
+ 'style_src' => "'self' 'unsafe-inline'",
+ 'worker_src' => "'self'",
+ 'object_src' => "'none'",
+ 'report_uri' => nil
+ }
}
+
+ allow_webpack_dev_server(settings_hash) if Rails.env.development?
+ allow_cdn(settings_hash) if ENV['GITLAB_CDN_HOST'].present?
+
+ settings_hash
end
def initialize(csp_directives)
@@ -38,6 +60,26 @@ module Gitlab
arguments.strip.split(' ').map(&:strip)
end
+
+ def self.allow_webpack_dev_server(settings_hash)
+ secure = Settings.webpack.dev_server['https']
+ host_and_port = "#{Settings.webpack.dev_server['host']}:#{Settings.webpack.dev_server['port']}"
+ http_url = "#{secure ? 'https' : 'http'}://#{host_and_port}"
+ ws_url = "#{secure ? 'wss' : 'ws'}://#{host_and_port}"
+
+ append_to_directive(settings_hash, 'connect_src', "#{http_url} #{ws_url}")
+ end
+
+ def self.allow_cdn(settings_hash)
+ cdn_host = ENV['GITLAB_CDN_HOST']
+
+ append_to_directive(settings_hash, 'script_src', cdn_host)
+ append_to_directive(settings_hash, 'style_src', cdn_host)
+ end
+
+ def self.append_to_directive(settings_hash, directive, text)
+ settings_hash['directives'][directive] = "#{settings_hash['directives'][directive]} #{text}".strip
+ end
end
end
end