Skip to content

Commit 87da9a9

Browse files
htdvisservishr
authored andcommitted
Add ReferrerPolicy to Secure middleware (#1363)
1 parent 8cabd1e commit 87da9a9

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

echo.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ const (
222222
HeaderContentSecurityPolicy = "Content-Security-Policy"
223223
HeaderContentSecurityPolicyReportOnly = "Content-Security-Policy-Report-Only"
224224
HeaderXCSRFToken = "X-CSRF-Token"
225+
HeaderReferrerPolicy = "Referrer-Policy"
225226
)
226227

227228
const (

middleware/secure.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ type (
6666
// maintained by Chrome (and used by Firefox and Safari): https://hstspreload.org/
6767
// Optional. Default value false.
6868
HSTSPreloadEnabled bool `yaml:"hsts_preload_enabled"`
69+
70+
// ReferrerPolicy sets the `Referrer-Policy` header providing security against
71+
// leaking potentially sensitive request paths to third parties.
72+
// Optional. Default value "".
73+
ReferrerPolicy string `yaml:"referrer_policy"`
6974
}
7075
)
7176

@@ -131,6 +136,9 @@ func SecureWithConfig(config SecureConfig) echo.MiddlewareFunc {
131136
res.Header().Set(echo.HeaderContentSecurityPolicy, config.ContentSecurityPolicy)
132137
}
133138
}
139+
if config.ReferrerPolicy != "" {
140+
res.Header().Set(echo.HeaderReferrerPolicy, config.ReferrerPolicy)
141+
}
134142
return next(c)
135143
}
136144
}

middleware/secure_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ func TestSecure(t *testing.T) {
2525
assert.Equal(t, "SAMEORIGIN", rec.Header().Get(echo.HeaderXFrameOptions))
2626
assert.Equal(t, "", rec.Header().Get(echo.HeaderStrictTransportSecurity))
2727
assert.Equal(t, "", rec.Header().Get(echo.HeaderContentSecurityPolicy))
28+
assert.Equal(t, "", rec.Header().Get(echo.HeaderReferrerPolicy))
2829

2930
// Custom
3031
req.Header.Set(echo.HeaderXForwardedProto, "https")
@@ -36,13 +37,15 @@ func TestSecure(t *testing.T) {
3637
XFrameOptions: "",
3738
HSTSMaxAge: 3600,
3839
ContentSecurityPolicy: "default-src 'self'",
40+
ReferrerPolicy: "origin",
3941
})(h)(c)
4042
assert.Equal(t, "", rec.Header().Get(echo.HeaderXXSSProtection))
4143
assert.Equal(t, "", rec.Header().Get(echo.HeaderXContentTypeOptions))
4244
assert.Equal(t, "", rec.Header().Get(echo.HeaderXFrameOptions))
4345
assert.Equal(t, "max-age=3600; includeSubdomains", rec.Header().Get(echo.HeaderStrictTransportSecurity))
4446
assert.Equal(t, "default-src 'self'", rec.Header().Get(echo.HeaderContentSecurityPolicy))
4547
assert.Equal(t, "", rec.Header().Get(echo.HeaderContentSecurityPolicyReportOnly))
48+
assert.Equal(t, "origin", rec.Header().Get(echo.HeaderReferrerPolicy))
4649

4750
// Custom with CSPReportOnly flag
4851
req.Header.Set(echo.HeaderXForwardedProto, "https")
@@ -55,13 +58,15 @@ func TestSecure(t *testing.T) {
5558
HSTSMaxAge: 3600,
5659
ContentSecurityPolicy: "default-src 'self'",
5760
CSPReportOnly: true,
61+
ReferrerPolicy: "origin",
5862
})(h)(c)
5963
assert.Equal(t, "", rec.Header().Get(echo.HeaderXXSSProtection))
6064
assert.Equal(t, "", rec.Header().Get(echo.HeaderXContentTypeOptions))
6165
assert.Equal(t, "", rec.Header().Get(echo.HeaderXFrameOptions))
6266
assert.Equal(t, "max-age=3600; includeSubdomains", rec.Header().Get(echo.HeaderStrictTransportSecurity))
6367
assert.Equal(t, "default-src 'self'", rec.Header().Get(echo.HeaderContentSecurityPolicyReportOnly))
6468
assert.Equal(t, "", rec.Header().Get(echo.HeaderContentSecurityPolicy))
69+
assert.Equal(t, "origin", rec.Header().Get(echo.HeaderReferrerPolicy))
6570

6671
// Custom, with preload option enabled
6772
req.Header.Set(echo.HeaderXForwardedProto, "https")

0 commit comments

Comments
 (0)