Index: src/routes/activitypub.js
===================================================================
--- src/routes/activitypub.js	(revision bb9e54cec02ebc6188104575f97e2d80a9b52679)
+++ src/routes/activitypub.js	(revision 4e5fe295413a76ce5327e908eaa1d702d538ee59)
@@ -1258,4 +1258,13 @@
   // cannot_resolve_inReplyTo. Strangers still get the exact same 404, so a
   // note's existence stays as private as before.
+  // EEN GEBLOKKEERDE KRIJGT DE DEUR DICHT (Robin, 21-8), net als bij de outbox:
+  // wie ondertekend aanklopt, klopt met zijn naam erop, en een blokkade is een
+  // gesloten deur. Dezelfde 404 als een vreemde, zodat het bestaan van een note
+  // niets extra's verraadt. Onbetekende verzoeken kunnen we niet thuisbrengen
+  // en houden de publieke weergave -- daarvoor is de Block-bezorging.
+  if (req.headers['signature']) {
+    const wie = await AP.verifyRequest(req).catch(() => null);
+    if (wie && wie.id && AP.isBlockedAny(wie.id)) return res.status(404).end();
+  }
   const post = db.prepare(
     "SELECT * FROM posts WHERE id = ? AND status = 'published'"
Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision bb9e54cec02ebc6188104575f97e2d80a9b52679)
+++ src/routes/posts.js	(revision 4e5fe295413a76ce5327e908eaa1d702d538ee59)
@@ -1534,5 +1534,5 @@
 router.post('/blocking/remove', requireSiteManager, (req, res) => {
   const site = res.locals.site;
-  if (site) { try { ActivityPubService.unblock(site, (req.body.target || '').toString()); } catch (e) { /* ignore */ } }
+  if (site) { try { ActivityPubService.unblock(site, (req.body.target || '').toString()).catch(() => {}); } catch (e) { /* ignore */ } }
   res.redirect('/blocking?success=' + encodeURIComponent('Deblokkeerd'));
 });
