Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use secure cookie for HTTPS sites #26999

Merged
merged 4 commits into from
Sep 11, 2023
Merged

Conversation

wxiaoguang
Copy link
Contributor

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.

image

@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Sep 10, 2023
@pull-request-size pull-request-size bot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Sep 10, 2023
@github-actions github-actions bot added the type/docs This PR mainly updates/creates documentation label Sep 10, 2023
@wxiaoguang wxiaoguang added this to the 1.21.0 milestone Sep 10, 2023
@GiteaBot GiteaBot added lgtm/need 1 This PR needs approval from one additional maintainer to be merged. and removed lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. labels Sep 10, 2023
@techknowlogick techknowlogick added backport/v1.20 This PR should be backported to Gitea 1.20 type/enhancement An improvement of existing functionality labels Sep 10, 2023
@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Sep 10, 2023
@lafriks lafriks enabled auto-merge (squash) September 10, 2023 23:22
@lafriks lafriks disabled auto-merge September 10, 2023 23:29
@@ -50,7 +50,7 @@ func loadSessionFrom(rootCfg ConfigProvider) {
}
SessionConfig.CookieName = sec.Key("COOKIE_NAME").MustString("i_like_gitea")
SessionConfig.CookiePath = AppSubURL + "/" // there was a bug, old code only set CookePath=AppSubURL, no trailing slash
SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(false)
SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(strings.HasPrefix(strings.ToLower(AppURL), "https://"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On second thought, I would actually drop reading setting key at all and remove it from configs and leaving just this assignment based on app url. From security point of view there is no point in making it use unsecured cookie over https

Copy link
Contributor Author

@wxiaoguang wxiaoguang Sep 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #26953

Theoretically yes. But:

  1. There is no "dynamic cookie secure" support in the go-chi package (it could be improved separately)
  2. "dynamic cookie secure" will leave security problems if the site admin doesn't configure the X-Forwarded-Proto correctly, because Gitea self might be running in HTTP mode behind an HTTPS proxy.
  3. Why the COOKIE_SECURE is still kept because in case the user really would like to run Gitea on HTTP and HTTPS at the same time and they know what they are doing.

Maybe we can use a new (breaking) approach in 1.21 or 1.22 and drop COOKIE_SECURE then

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

points 1 and 2 are not really relevant for this solution but as for 3 I don't really see such use-case so in name of security I would propose to drop this setting in future

Copy link
Contributor Author

@wxiaoguang wxiaoguang Sep 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, the change has been backported to 1.20, let's break it for 1.21 later

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

points 1 and 2 are not really relevant for this solution but as for 3 I don't really see such use-case so in name of security I would propose to drop this setting in future

The case: #29451

@lunny lunny added the reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. label Sep 11, 2023
@lunny lunny merged commit 998cea5 into go-gitea:main Sep 11, 2023
@GiteaBot
Copy link
Collaborator

I was unable to create a backport for 1.20. @wxiaoguang, please send one manually. 🍵

go run ./contrib/backport 26999
...  // fix git conflicts if any
go run ./contrib/backport --continue

@GiteaBot GiteaBot added backport/manual No power to the bots! Create your backport yourself! and removed reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. labels Sep 11, 2023
@wxiaoguang wxiaoguang deleted the use-cookie-secure branch September 11, 2023 09:09
wxiaoguang added a commit to wxiaoguang/gitea that referenced this pull request Sep 11, 2023
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.
silverwind pushed a commit that referenced this pull request Sep 11, 2023
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.
zjjhot added a commit to zjjhot/gitea that referenced this pull request Sep 12, 2023
* upstream/main:
  Add more package registry paths to the labeler (go-gitea#27032)
  Extract auth middleware from service (go-gitea#27028)
  S3: log human readable error on connection failure (go-gitea#26856)
  [skip ci] Updated translations via Crowdin
  Fix "delete" modal dialog for issue/PR (go-gitea#27015)
  Fix context cache bug & enable context cache for dashabord commits' authors (go-gitea#26991)
  fix: typo (go-gitea#27009)
  Use secure cookie for HTTPS sites (go-gitea#26999)
  Add fetch wrappers, ignore network errors in actions view (go-gitea#26985)
nrdufour added a commit to nrdufour/home-ops that referenced this pull request Oct 4, 2023
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker.io/gitea/gitea](https://github.com/go-gitea/gitea) | patch | `1.20.4` -> `1.20.5` |

---

### ⚠ Dependency Lookup Warnings ⚠

Warnings were logged while processing this repo. Please check the logs for more information.

---

### Release Notes

<details>
<summary>go-gitea/gitea (docker.io/gitea/gitea)</summary>

### [`v1.20.5`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1205---2023-10-03)

[Compare Source](go-gitea/gitea@v1.20.4...v1.20.5)

-   ENHANCEMENTS
    -   Fix z-index on markdown completion ([#&#8203;27237](go-gitea/gitea#27237)) ([#&#8203;27242](go-gitea/gitea#27242) & [#&#8203;27238](go-gitea/gitea#27238))
    -   Use secure cookie for HTTPS sites ([#&#8203;26999](go-gitea/gitea#26999)) ([#&#8203;27013](go-gitea/gitea#27013))
-   BUGFIXES
    -   Fix git 2.11 error when checking IsEmpty ([#&#8203;27393](go-gitea/gitea#27393)) ([#&#8203;27396](go-gitea/gitea#27396))
    -   Allow get release download files and lfs files with oauth2 token format ([#&#8203;26430](go-gitea/gitea#26430)) ([#&#8203;27378](go-gitea/gitea#27378))
    -   Fix orphan check for deleted branch ([#&#8203;27310](go-gitea/gitea#27310)) ([#&#8203;27320](go-gitea/gitea#27320))
    -   Quote table `release` in sql queries ([#&#8203;27205](go-gitea/gitea#27205)) ([#&#8203;27219](go-gitea/gitea#27219))
    -   Fix release URL in webhooks ([#&#8203;27182](go-gitea/gitea#27182)) ([#&#8203;27184](go-gitea/gitea#27184))
    -   Fix successful return value for `SyncAndGetUserSpecificDiff` ([#&#8203;27152](go-gitea/gitea#27152)) ([#&#8203;27156](go-gitea/gitea#27156))
    -   fix pagination for followers and following ([#&#8203;27127](go-gitea/gitea#27127)) ([#&#8203;27138](go-gitea/gitea#27138))
    -   Fix issue templates when blank isses are disabled ([#&#8203;27061](go-gitea/gitea#27061)) ([#&#8203;27082](go-gitea/gitea#27082))
    -   Fix context cache bug & enable context cache for dashabord commits' authors([#&#8203;26991](go-gitea/gitea#26991)) ([#&#8203;27017](go-gitea/gitea#27017))
    -   Fix INI parsing for value with trailing slash ([#&#8203;26995](go-gitea/gitea#26995)) ([#&#8203;27001](go-gitea/gitea#27001))
    -   Fix PushEvent NullPointerException jenkinsci/github-plugin ([#&#8203;27203](go-gitea/gitea#27203)) ([#&#8203;27249](go-gitea/gitea#27249))
    -   Fix organization field being null in POST /orgs/{orgid}/teams ([#&#8203;27150](go-gitea/gitea#27150)) ([#&#8203;27167](go-gitea/gitea#27167) & [#&#8203;27162](go-gitea/gitea#27162))
    -   Fix bug of review request number ([#&#8203;27406](go-gitea/gitea#27406)) ([#&#8203;27104](go-gitea/gitea#27104))
-   TESTING
    -   services/wiki: Close() after error handling ([#&#8203;27129](go-gitea/gitea#27129)) ([#&#8203;27137](go-gitea/gitea#27137))
-   DOCS
    -   Improve actions docs related to `pull_request` event ([#&#8203;27126](go-gitea/gitea#27126)) ([#&#8203;27145](go-gitea/gitea#27145))
-   MISC
    -   Add logs for data broken of comment review ([#&#8203;27326](go-gitea/gitea#27326)) ([#&#8203;27344](go-gitea/gitea#27344))
    -   Load reviewer before sending notification ([#&#8203;27063](go-gitea/gitea#27063)) ([#&#8203;27064](go-gitea/gitea#27064))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zLjIiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

Reviewed-on: https://git.home/nrdufour/home-ops/pulls/129
Co-authored-by: Renovate <renovate@ptinem.io>
Co-committed-by: Renovate <renovate@ptinem.io>
@go-gitea go-gitea locked as resolved and limited conversation to collaborators Dec 10, 2023
@lunny lunny added the backport/done All backports for this PR have been created label Feb 29, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
backport/done All backports for this PR have been created backport/manual No power to the bots! Create your backport yourself! backport/v1.20 This PR should be backported to Gitea 1.20 lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. size/S Denotes a PR that changes 10-29 lines, ignoring generated files. type/docs This PR mainly updates/creates documentation type/enhancement An improvement of existing functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants