Changeset dc0da72 in Klonkt for test/ssrf-allowlist.test.js


Ignore:
Timestamp:
08/08/2026 09:03:48 PM (4 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
a4b903a
Parents:
29eb745
git-author:
Robin <roboburr@…> (08/08/2026 09:03:46 PM)
git-committer:
roboburr <roboburr@…> (08/08/2026 09:03:48 PM)
Message:

Alleen claimen wat je herkent (regressie uit shaer-8ru)

Barts honderd aanbiedingen liepen meteen stuk op "400 unsupported_offer", en dat
was mijn fout van een uur eerder.

Ik zette het gate-voorstel als case 'Offer' in de outbox-switch. Die case
claimde ELKE Offer: wat geen shaer:GatedSetting was kreeg 400 -- dus ook de
adoptie-handshake, en straks elke Offer-vorm die we nog toevoegen. De
guardianship-afhandeling stond ervoor en ving het meestal op, maar zodra die iets
niet herkende viel het in mijn 400 in plaats van door te lopen.

Nu voor de switch, naast de andere Offer-afhandeling, en alleen als
parseGatedSetting iets teruggeeft. De toets die 'unsupported_offer' verwachtte is
vervangen: die legde mijn verkeerde aanname vast. Er staat nu een toets op dat een
adoptie-Offer NIET door de gate-tak wordt afgevangen.

Twee kleinere dingen die dezelfde ronde boven kwamen:

  • Het aanbod-script gebruikte een verzonnen relatie-URI en werd daarom stil geweigerd. isGuardianRelationship accepteert precies twee waarden.
  • De SSRF-toets hing af van wat er toevallig draaide: hij ging ervan uit dat er niets op [::1]:3060 luisterde, en viel om zodra de testkudde daar stond. Nu een poort waar met opzet niets luistert. Een toets die afhangt van wat er draait bewijst niets.

Suite 756/756.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/ssrf-allowlist.test.js

    r29eb745 rdc0da72  
    1212
    1313process.env.DATABASE_PATH = ':memory:';
    14 process.env.AP_ALLOW_HOSTS = '[::1]:3060';
     14// Een poort waar met opzet NIETS op luistert. Eerst stond hier 3060, en toen de
     15// testkudde daar ging draaien slaagde de fetch en viel de toets om -- een toets
     16// die afhangt van wat er toevallig draait, bewijst niets.
     17process.env.AP_ALLOW_HOSTS = '[::1]:59321';
    1518const AP = await import('../src/services/ActivityPubService.js');
    1619
     
    2528  // niets op 3060, dus we verwachten een VERBINDINGSfout -- het bewijs is dat
    2629  // het geen ssrf-fout is.
    27   const fout = await faalt('http://[::1]:3060/u/w001');
    28   assert.ok(fout, 'er is wel degelijk een fout, want er luistert niets');
     30  const fout = await faalt('http://[::1]:59321/niets');
     31  assert.ok(fout, 'er is wel een fout, want er luistert niets op die poort');
    2932  assert.ok(!String(fout).startsWith('ssrf-'), `door de poort, maar kreeg: ${fout}`);
    3033});
     
    3235test('een adres dat NIET op de lijst staat blijft geweigerd', async () => {
    3336  // Zelfde machine, andere poort. Zou dit doorlaten, dan is de lijst een vlag.
    34   assert.equal(await faalt('http://[::1]:3061/u/w001'), 'ssrf-blocked-ip');
     37  assert.equal(await faalt('http://[::1]:3060/u/w001'), 'ssrf-blocked-ip');
    3538});
    3639
    3740test('en 127.0.0.1 evenmin, ook al is het dezelfde machine', async () => {
    3841  // De lijst opent een HOST:POORT, geen begrip van "lokaal".
    39   assert.equal(await faalt('http://127.0.0.1:3060/u/w001'), 'ssrf-blocked-ip');
     42  assert.equal(await faalt('http://127.0.0.1:59321/niets'), 'ssrf-blocked-ip');
    4043});
    4144
     
    5255  const mod = await import(`../src/services/ActivityPubService.js?leeg=${Date.now()}`);
    5356  let fout = null;
    54   try { await mod.safeFetch('http://[::1]:3060/u/w001'); } catch (e) { fout = e.message; }
     57  try { await mod.safeFetch('http://[::1]:59321/niets'); } catch (e) { fout = e.message; }
    5558  assert.equal(fout, 'ssrf-blocked-ip');
    5659  process.env.AP_ALLOW_HOSTS = eerder;
Note: See TracChangeset for help on using the changeset viewer.