fix: preserve browser form origins for update panel authentication

This commit is contained in:
Codex
2026-10-24 14:49:43 +08:00
parent 2f11a8c904
commit 9a198fe466
4 changed files with 76 additions and 1 deletions
+17
View File
@@ -101,6 +101,23 @@ def test_csrf_and_cross_origin_login_publish_logout_are_rejected(service):
assert client.post('/update/logout', data={'csrf': 'bad'}, headers={'Origin': BASE}).status_code == 403
@pytest.mark.parametrize('origin', [None, 'null', 'https://evil.test'])
def test_valid_csrf_does_not_allow_missing_null_or_foreign_origin(service, origin):
client, _ = service
headers = {} if origin is None else {'Origin': origin}
page = client.get('/update')
values = {'username': 'admin', 'password': PASSWORD, 'csrf': csrf(page)}
assert client.post('/update/login', data=values, headers=headers).status_code == 403
assert login(client).status_code == 303
page = client.get('/update')
values = {'csrf': csrf(page), 'version': '0.8.0', 'build_number': '25',
'notes': '不得发布', 'download_url': BASE + '/test.apk', 'revision': 'none'}
assert client.post('/update/publish', data=values, headers=headers).status_code == 403
assert client.get('/v1/updates/android').json()['latest'] is None
assert client.post('/update/logout', data={'csrf': csrf(page)}, headers=headers).status_code == 403
assert 'name="download_url"' in client.get('/update').text
def test_login_rejects_unicode_username_and_limits_password_guesses(service):
client, _ = service
page = client.get('/update')