Skip to content

Commit b0a405c

Browse files
authored
Use secure cookie for HTTPS sites (#26999) (#27013)
Backport #26999 If the AppURL(ROOT_URL) is an HTTPS URL, then the COOKIE_SECURE's default value should be true. And, if a user visits an "http" site with "https" AppURL, they won't be able to login, and they should have been warned. The only problem is that the "language" can't be set either in such case, while I think it is not a serious problem, and it could be fixed easily if needed.
1 parent 3c53740 commit b0a405c

File tree

4 files changed

+5
-5
lines changed

4 files changed

+5
-5
lines changed

custom/conf/app.example.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,8 +1724,8 @@ LEVEL = Info
17241724
;; Session cookie name
17251725
;COOKIE_NAME = i_like_gitea
17261726
;;
1727-
;; If you use session in https only, default is false
1728-
;COOKIE_SECURE = false
1727+
;; If you use session in https only: true or false. If not set, it defaults to `true` if the ROOT_URL is an HTTPS URL.
1728+
;COOKIE_SECURE =
17291729
;;
17301730
;; Session GC time interval in seconds, default is 86400 (1 day)
17311731
;GC_INTERVAL_TIME = 86400

docs/content/administration/config-cheat-sheet.en-us.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ and
772772

773773
- `PROVIDER`: **memory**: Session engine provider \[memory, file, redis, redis-cluster, db, mysql, couchbase, memcache, postgres\]. Setting `db` will reuse the configuration in `[database]`
774774
- `PROVIDER_CONFIG`: **data/sessions**: For file, the root path; for db, empty (database config will be used); for others, the connection string. Relative paths will be made absolute against _`AppWorkPath`_.
775-
- `COOKIE_SECURE`: **false**: Enable this to force using HTTPS for all session access.
775+
- `COOKIE_SECURE`:**_empty_**: `true` or `false`. Enable this to force using HTTPS for all session access. If not set, it defaults to `true` if the ROOT_URL is an HTTPS URL.
776776
- `COOKIE_NAME`: **i\_like\_gitea**: The name of the cookie used for the session ID.
777777
- `GC_INTERVAL_TIME`: **86400**: GC interval in seconds.
778778
- `SESSION_LIFE_TIME`: **86400**: Session life time in seconds, default is 86400 (1 day)

docs/content/administration/config-cheat-sheet.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ menu:
200200

201201
- `PROVIDER`: Session 内容存储方式,可选 `memory`, `file`, `redis``mysql`
202202
- `PROVIDER_CONFIG`: 如果是文件,那么这里填根目录;其他的要填主机地址和端口。
203-
- `COOKIE_SECURE`: 强制使用 HTTPS 作为session访问
203+
- `COOKIE_SECURE`: **_empty_**`true``false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置,当 ROOT_URL 是 https 链接的时候默认设置为 true
204204
- `GC_INTERVAL_TIME`: Session失效时间。
205205

206206
## Picture (`picture`)

modules/setting/session.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func loadSessionFrom(rootCfg ConfigProvider) {
5050
}
5151
SessionConfig.CookieName = sec.Key("COOKIE_NAME").MustString("i_like_gitea")
5252
SessionConfig.CookiePath = AppSubURL + "/" // there was a bug, old code only set CookePath=AppSubURL, no trailing slash
53-
SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(false)
53+
SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(strings.HasPrefix(strings.ToLower(AppURL), "https://"))
5454
SessionConfig.Gclifetime = sec.Key("GC_INTERVAL_TIME").MustInt64(86400)
5555
SessionConfig.Maxlifetime = sec.Key("SESSION_LIFE_TIME").MustInt64(86400)
5656
SessionConfig.Domain = sec.Key("DOMAIN").String()

0 commit comments

Comments
 (0)