@@ -57,6 +57,10 @@ type (
57
57
// Indicates if CSRF cookie is HTTP only.
58
58
// Optional. Default value false.
59
59
CookieHTTPOnly bool `yaml:"cookie_http_only"`
60
+
61
+ // Indicates SameSite mode of the CSRF cookie.
62
+ // Optional. Default value SameSiteDefaultMode.
63
+ CookieSameSite http.SameSite `yaml:"cookie_same_site"`
60
64
}
61
65
62
66
// csrfTokenExtractor defines a function that takes `echo.Context` and returns
@@ -67,12 +71,13 @@ type (
67
71
var (
68
72
// DefaultCSRFConfig is the default CSRF middleware config.
69
73
DefaultCSRFConfig = CSRFConfig {
70
- Skipper : DefaultSkipper ,
71
- TokenLength : 32 ,
72
- TokenLookup : "header:" + echo .HeaderXCSRFToken ,
73
- ContextKey : "csrf" ,
74
- CookieName : "_csrf" ,
75
- CookieMaxAge : 86400 ,
74
+ Skipper : DefaultSkipper ,
75
+ TokenLength : 32 ,
76
+ TokenLookup : "header:" + echo .HeaderXCSRFToken ,
77
+ ContextKey : "csrf" ,
78
+ CookieName : "_csrf" ,
79
+ CookieMaxAge : 86400 ,
80
+ CookieSameSite : http .SameSiteDefaultMode ,
76
81
}
77
82
)
78
83
@@ -105,6 +110,9 @@ func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc {
105
110
if config .CookieMaxAge == 0 {
106
111
config .CookieMaxAge = DefaultCSRFConfig .CookieMaxAge
107
112
}
113
+ if config .CookieSameSite == 0 {
114
+ config .CookieSameSite = http .SameSiteDefaultMode
115
+ }
108
116
109
117
// Initialize
110
118
parts := strings .Split (config .TokenLookup , ":" )
@@ -157,6 +165,9 @@ func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc {
157
165
if config .CookieDomain != "" {
158
166
cookie .Domain = config .CookieDomain
159
167
}
168
+ if config .CookieSameSite != http .SameSiteDefaultMode {
169
+ cookie .SameSite = config .CookieSameSite
170
+ }
160
171
cookie .Expires = time .Now ().Add (time .Duration (config .CookieMaxAge ) * time .Second )
161
172
cookie .Secure = config .CookieSecure
162
173
cookie .HttpOnly = config .CookieHTTPOnly
0 commit comments