Analytics: Heatmap-Endpunkt nachgeschaerft
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
28c7a90d8b
commit
add7fa4add
4 files changed
+97
-13
No files matched your search
@@ -100,3 +100,39 @@ test('/a/heat nur auf dem öffentlichen Listener', async () => {
|
||||
assert.equal(r.status, 404);
|
||||
server.close();
|
||||
});
|
||||
|
||||
test('403 bei ausgeschalteter Website (active = 0), mit CORS für die eigene Domain', async () => {
|
||||
const s = await setup();
|
||||
s.db.prepare('UPDATE sites SET active = 0 WHERE siteKey = ?').run(KEY);
|
||||
const r = await s.get(tok(), { Origin: 'https://kunde.de' });
|
||||
assert.equal(r.status, 403);
|
||||
assert.equal(r.headers.get('access-control-allow-origin'), 'https://kunde.de');
|
||||
s.close();
|
||||
});
|
||||
|
||||
test('403 mit CORS-Kopf, wenn die Website bekannt ist (abgelaufen, aus); sonst ohne', async () => {
|
||||
const s = await setup();
|
||||
const origin = { Origin: 'https://www.kunde.de' };
|
||||
const abgelaufen = await s.get(tok({ exp: exp(-1) }), origin);
|
||||
assert.equal(abgelaufen.status, 403);
|
||||
assert.equal(abgelaufen.headers.get('access-control-allow-origin'), 'https://www.kunde.de');
|
||||
// fremder Origin, falsche Signatur, unbekannte Website: kein CORS-Kopf
|
||||
assert.equal((await s.get(tok({ exp: exp(-1) }), { Origin: 'https://evil.example' })).headers.get('access-control-allow-origin'), null);
|
||||
assert.equal((await s.get(tok({}, 'anderes-secret'), origin)).headers.get('access-control-allow-origin'), null);
|
||||
assert.equal((await s.get(tok({ siteKey: 'nichtvorhanden0123456' }), origin)).headers.get('access-control-allow-origin'), null);
|
||||
assert.equal((await s.get('abc', origin)).headers.get('access-control-allow-origin'), null);
|
||||
s.close();
|
||||
});
|
||||
|
||||
test('OPTIONS-Preflight: CORS-Köpfe nur für erlaubte Origins bekannter Websites', async () => {
|
||||
const s = await setup();
|
||||
const pre = (token, origin) => fetch(`${s.base}/a/heat?token=${encodeURIComponent(token)}`, { method: 'OPTIONS', headers: { Origin: origin, 'Access-Control-Request-Method': 'GET' } });
|
||||
const ok = await pre(tok(), 'https://kunde.de');
|
||||
assert.equal(ok.status, 204);
|
||||
assert.equal(ok.headers.get('access-control-allow-origin'), 'https://kunde.de');
|
||||
assert.match(ok.headers.get('access-control-allow-methods'), /GET/);
|
||||
assert.equal((await pre(tok({ exp: exp(-1) }), 'https://kunde.de')).headers.get('access-control-allow-origin'), 'https://kunde.de');
|
||||
assert.equal((await pre(tok(), 'https://evil.example')).headers.get('access-control-allow-origin'), null);
|
||||
assert.equal((await pre('abc', 'https://kunde.de')).headers.get('access-control-allow-origin'), null);
|
||||
s.close();
|
||||
});
|
||||
Reference in new issue
Block a user