Skip to content

Commit dab741d

Browse files
Support Referrer-Policy http response
1 parent 922faf3 commit dab741d

4 files changed

Lines changed: 65 additions & 1 deletion

File tree

deps/rabbitmq_management/priv/schema/rabbitmq_management.schema

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,20 @@ fun(Conf) ->
461461
end}.
462462

463463

464+
%% Referrer-Policy (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy)
465+
466+
{mapping, "management.headers.referrer_policy", "rabbitmq_management.headers.referrer_policy", [
467+
{datatype, string}
468+
]}.
469+
470+
{translation, "rabbitmq_management.headers.referrer_policy",
471+
fun(Conf) ->
472+
case cuttlefish:conf_get("management.headers.referrer_policy", Conf, undefined) of
473+
undefined -> cuttlefish:unset();
474+
Value -> Value
475+
end
476+
end}.
477+
464478

465479
{mapping, "management.disable_basic_auth", "rabbitmq_management.disable_basic_auth",
466480
[{datatype, boolean}]}.

deps/rabbitmq_management/src/rabbit_mgmt_headers.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
-define(X_CONTENT_TYPE_OPTIONS_HEADER, <<"x-content-type-options">>).
1616
-define(X_FRAME_OPTIONS_HEADER, <<"x-frame-options">>).
1717
-define(X_XSS_PROTECTION_HEADER, <<"x-xss-protection">>).
18+
-define(REFERRER_POLICY_HEADER, <<"referrer-policy">>).
1819

1920
%%
2021
%% API
@@ -38,6 +39,9 @@ set_xss_protection_header(ReqData, _Module) ->
3839
set_frame_options_header(ReqData, _Module) ->
3940
maybe_set_known_configured_header(ReqData, frame_options, ?X_FRAME_OPTIONS_HEADER).
4041

42+
set_referrer_policy_header(ReqData, _Module) ->
43+
maybe_set_known_configured_header(ReqData, referrer_policy, ?REFERRER_POLICY_HEADER).
44+
4145
maybe_set_known_configured_header(ReqData, AppEnvKey, HeaderName) ->
4246
case application:get_env(rabbitmq_management, headers) of
4347
undefined -> ReqData;
@@ -61,7 +65,8 @@ set_common_permission_headers(ReqData0, EndpointModule) ->
6165
fun set_cors_headers/2,
6266
fun set_content_type_options_header/2,
6367
fun set_xss_protection_header/2,
64-
fun set_frame_options_header/2]).
68+
fun set_frame_options_header/2,
69+
fun set_referrer_policy_header/2]).
6570

6671
set_etag_based_cache_headers(ReqData0, _Module) ->
6772
cowboy_req:set_resp_header(<<"cache-control">>, <<"public, max-age=0, must-revalidate">>, ReqData0).

deps/rabbitmq_management/test/config_schema_SUITE_data/rabbitmq_management.snippets

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,37 @@
533533
], [rabbitmq_management]
534534
},
535535

536+
%%
537+
%% Referrer-Policy
538+
%%
539+
540+
{headers_referrer_policy_case1,
541+
"management.headers.referrer_policy = no-referrer",
542+
[
543+
{rabbitmq_management, [
544+
{headers, [
545+
{referrer_policy, "no-referrer"}
546+
]}
547+
]}
548+
], [rabbitmq_management]
549+
},
550+
551+
{csp_and_hsts_and_referrer_policy_combined,
552+
"management.csp.policy = default-src 'self' *.mailsite.com; img-src *
553+
management.hsts.policy = max-age=31536000; includeSubDomains
554+
management.headers.referrer_policy = no-referrer",
555+
[
556+
{rabbitmq_management, [
557+
{content_security_policy, "default-src 'self' *.mailsite.com; img-src *"},
558+
{strict_transport_security, "max-age=31536000; includeSubDomains"},
559+
560+
{headers, [
561+
{referrer_policy, "no-referrer"}
562+
]}
563+
]}
564+
], [rabbitmq_management]
565+
},
566+
536567
%%
537568
%% Restrictions
538569
%%

deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ all_tests() -> [
217217
login_encrypted_test,
218218
login_session_cookie_test,
219219
csp_headers_test,
220+
referrer_policy_headers_test,
220221
auth_attempts_test,
221222
user_limits_list_test,
222223
user_limit_set_test,
@@ -4334,6 +4335,19 @@ csp_headers_test(Config) ->
43344335
{ok, {_, HdGetCsp1, _}} = req(Config, get_static, "/index.html", Headers),
43354336
?assert(lists:keymember("content-security-policy", 1, HdGetCsp1)).
43364337

4338+
referrer_policy_headers_test(Config) ->
4339+
AuthHeader = auth_header("guest", "guest"),
4340+
rpc(Config, application, set_env,
4341+
[rabbitmq_management, headers, [{referrer_policy, "no-referrer"}]]),
4342+
{ok, {_, Hd0, _}} = req(Config, get, "/whoami", [AuthHeader]),
4343+
?assertEqual("no-referrer",
4344+
proplists:get_value("referrer-policy", Hd0)),
4345+
rpc(Config, application, set_env,
4346+
[rabbitmq_management, headers, []]),
4347+
{ok, {_, Hd1, _}} = req(Config, get, "/whoami", [AuthHeader]),
4348+
?assertEqual(undefined,
4349+
proplists:get_value("referrer-policy", Hd1)).
4350+
43374351
disable_basic_auth_test(Config) ->
43384352
rpc(Config, application, set_env, [rabbitmq_management, disable_basic_auth, true]),
43394353
http_get(Config, "/overview", ?NOT_AUTHORISED),

0 commit comments

Comments
 (0)