diff options
| author | Leitwolf11 | 2026-11-09 00:38:47 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-11-09 00:38:47 +0300 |
| commit | 66f3cc196a9b91d471a90e021b12630100181c4a (patch) | |
| tree | a3cb0422c44094f1d00ddb312e9035afe1096c86 /apps/api/Accounts/PostgresAccountStore.cs | |
| parent | d28c8c216708c3bb59773722e6235c4c8cbb2b73 (diff) | |
| download | progmaweb-66f3cc196a9b91d471a90e021b12630100181c4a.tar.gz | |
Rate-limit sign-in by visitor behind Cloudflare and stop forwarding h2c
Cloudflare proxies the Progmasoft hosts, so Nginx saw a Cloudflare edge as
its peer and appended that edge to X-Forwarded-For. The API takes the last
hop as the client, so the account-auth limit (12 attempts in 3 minutes) was
counted per edge: 38 failed sign-ins from one address in a row were all
answered with 401, none with 429, and unrelated visitors behind one edge
shared a bucket.
- ops/nginx/cloudflare-real-ip.conf trusts CF-Connecting-IP only from the
published Cloudflare ranges; a direct peer keeps its own address, so the
header cannot be forged around Cloudflare. With it installed the 13th
failed sign-in gets 429, a forged X-Forwarded-For changes nothing, and
another address is not affected.
- Every proxied location forwarded the client's Upgrade header with
"Connection: upgrade" on each request. Only a WebSocket upgrade is now
forwarded; other requests carry no Upgrade and an empty Connection.
- c8 reached glob 13 (GHSA-3g3m-2fjr-6pw4) and minimatch 10
(GHSA-g3hv-75wg-m249) through test-exclude; both are overridden to the
fixed majors. pnpm audit reports nothing, coverage, lint and check pass.
- The CodeQL action pins carry their exact version comment (v4.38.2).
- ops/README.md describes the address handling and no longer names a
script that left the repository with AI Support.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'apps/api/Accounts/PostgresAccountStore.cs')
0 files changed, 0 insertions, 0 deletions