projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'match-file-name' into 'develop'
[akkoma]
/
lib
/
pleroma
/
plugs
/
http_security_plug.ex
diff --git
a/lib/pleroma/plugs/http_security_plug.ex
b/lib/pleroma/plugs/http_security_plug.ex
index f701aaaa5cec3b6157a1e08bf5957df52ca9555b..a7cc228318af06514ae7a74ca15d3478d56816c7 100644
(file)
--- a/
lib/pleroma/plugs/http_security_plug.ex
+++ b/
lib/pleroma/plugs/http_security_plug.ex
@@
-20,8
+20,9
@@
defmodule Pleroma.Plugs.HTTPSecurityPlug do
defp headers do
referrer_policy = Config.get([:http_security, :referrer_policy])
defp headers do
referrer_policy = Config.get([:http_security, :referrer_policy])
+ report_uri = Config.get([:http_security, :report_uri])
- [
+
headers =
[
{"x-xss-protection", "1; mode=block"},
{"x-permitted-cross-domain-policies", "none"},
{"x-frame-options", "DENY"},
{"x-xss-protection", "1; mode=block"},
{"x-permitted-cross-domain-policies", "none"},
{"x-frame-options", "DENY"},
@@
-30,30
+31,45
@@
defmodule Pleroma.Plugs.HTTPSecurityPlug do
{"x-download-options", "noopen"},
{"content-security-policy", csp_string() <> ";"}
]
{"x-download-options", "noopen"},
{"content-security-policy", csp_string() <> ";"}
]
+
+ if report_uri do
+ report_group = %{
+ "group" => "csp-endpoint",
+ "max-age" => 10_886_400,
+ "endpoints" => [
+ %{"url" => report_uri}
+ ]
+ }
+
+ headers ++ [{"reply-to", Jason.encode!(report_group)}]
+ else
+ headers
+ end
end
defp csp_string do
scheme = Config.get([Pleroma.Web.Endpoint, :url])[:scheme]
static_url = Pleroma.Web.Endpoint.static_url()
end
defp csp_string do
scheme = Config.get([Pleroma.Web.Endpoint, :url])[:scheme]
static_url = Pleroma.Web.Endpoint.static_url()
- websocket_url = String.replace(static_url, "http", "ws")
+ websocket_url = Pleroma.Web.Endpoint.websocket_url()
+ report_uri = Config.get([:http_security, :report_uri])
connect_src = "connect-src 'self' #{static_url} #{websocket_url}"
connect_src =
connect_src = "connect-src 'self' #{static_url} #{websocket_url}"
connect_src =
- if
Mix.env(
) == :dev do
+ if
Pleroma.Config.get(:env
) == :dev do
connect_src <> " http://localhost:3035/"
else
connect_src
end
script_src =
connect_src <> " http://localhost:3035/"
else
connect_src
end
script_src =
- if
Mix.env(
) == :dev do
+ if
Pleroma.Config.get(:env
) == :dev do
"script-src 'self' 'unsafe-eval'"
else
"script-src 'self'"
end
"script-src 'self' 'unsafe-eval'"
else
"script-src 'self'"
end
- [
+
main_part =
[
"default-src 'none'",
"base-uri 'self'",
"frame-ancestors 'none'",
"default-src 'none'",
"base-uri 'self'",
"frame-ancestors 'none'",
@@
-63,11
+79,14
@@
defmodule Pleroma.Plugs.HTTPSecurityPlug do
"font-src 'self'",
"manifest-src 'self'",
connect_src,
"font-src 'self'",
"manifest-src 'self'",
connect_src,
- script_src,
- if scheme == "https" do
- "upgrade-insecure-requests"
- end
+ script_src
]
]
+
+ report = if report_uri, do: ["report-uri #{report_uri}; report-to csp-endpoint"], else: []
+
+ insecure = if scheme == "https", do: ["upgrade-insecure-requests"], else: []
+
+ (main_part ++ report ++ insecure)
|> Enum.join("; ")
end
|> Enum.join("; ")
end