---
title: "ADR-0003: Zwei Middlewaregrenzen und ein kontrollierter terminaler Transport"
manual: "HTTP Guard"
version: "0.1.4"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0003@0.1.4"
source: "Adr/ADR-0003-MiddlewareAndControlledTransport.rst"
rendered: "2026-10-18T14:31:43+00:00"
---

# ADR-0003: Zwei Middlewaregrenzen und ein kontrollierter terminaler Transport {#adr-0003}

-   *Status:* Historischer Vorschlag (Original: Vorgeschlagen)
-   *Datum:* 2026-10-08
-   *Entscheidungsträger im Original:* Projektverantwortliche Architektur/Security; Freigabe noch ausstehend
-   *Anforderungen:* HG-001, HG-002, HG-009, HG-019, HG-021, HG-023
-   *Ablösung im Original:* keine; neue Entscheidung für das vorgeschlagene Produkt
-   *Originalquelle:* [Unveränderter ADR-0003](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/adr/ADR-0003-middleware-und-kontrollierter-transport.md)

> [!NOTE]
> Dieser ADR gibt den vollständigen Vorschlag vom 2026-10-08 wieder. Status,
> ausstehende Freigaben und geplante Tests beschreiben diesen Originalstand.
> Die aktuelle Alpha-Arbeit ist vom Nutzer freigegeben. Den heutigen
> Paketaufbau beschreibt [ADR-0015: Eine installierbare Extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0015@0.1.4); für das aktuelle
> Sicherheitsverhalten und die ausgeführten Nachweise gelten [Schutzmodell und Grenzen](https://docs.typo3.org/permalink/netresearch/nr-http-guard:security@0.1.4)
> und [Dokumentierte Prüfstände](https://docs.typo3.org/permalink/netresearch/nr-http-guard:verification-report@0.1.4).
>
> [ADR-0016: Die öffentliche RequestFactory als URI-Grenze](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0016@0.1.4) beschreibt die zusätzliche öffentliche RequestFactory-Grenze
> des umgesetzten Adapters. Die im Original verworfene Alternative bezieht
> sich auf die interne Client-Factory.

## Kontext {#adr-0003-context}

Der Core installiert eigene Middlewarehandler nach Guzzles Defaults und der
optionalen Core-Allowlist. Eine gewöhnliche Vorprüfung vor einem opaken
`$next` garantiert nicht, welcher Transport danach läuft. Auch ein
nachträgliches Umschreiben von Request-Origin oder Response-Location kann eine
frühere Prüfung entwerten. \[S01, S05, S12, S20\]

## Entscheidung {#adr-0003-decision}

Der TYPO3-Adapter registriert `nr/http-guard-boundary` als ersten und `nr/http-guard-terminal`
als letzten eigenen Middlewareeintrag. Bestehende eigene Middlewares bleiben
dazwischen. Boundary erfasst die geprüfte Eingangsorigin; Terminal verifiziert
das endgültige Ziel und startet im Enforce-Modus einen kontrollierten Transfer
statt den automatisch gewählten Leafhandler.

Originwechsel durch dazwischenliegende Middleware werden abgelehnt. Die Boundary
prüft die finale Response nach den eigenen Response-Middlewares und vor Guzzles
Redirect-Verarbeitung. Damit wird auch eine nachträglich geänderte Location
erfasst. Reguläre Redirects laufen erneut durch den Stack.

Reihenfolge und Einmaligkeit sind Invarianten. Ein bestehender `HandlerStack`
als Globalkonfiguration oder ein Eintrag hinter Terminal ist nicht still
kompatibel. AP-01 muss den konkreten Registrierungsweg im echten Bootstrap
beider TYPO3-Versionen belegen; der Entwurf behauptet kein passendes,
ungeprüftes Core-Event.

## Verworfene Alternativen {#adr-0003-rejected-alternatives}

**Eine reine Vorprüfungsmiddleware:** unkontrollierter Transport. **Interne
Corefactory dekorieren/Xclass:** unnötige Abhängigkeit von interner API.
**Ganzen Client ersetzen:** verliert vorhandene Middlewaresemantik. **Ein
terminaler Guard ohne Boundary:** kann spät geänderte Redirectantworten nicht
kontrollieren.

## Konsequenzen {#adr-0003-consequences}

Der dokumentierte Erweiterungspunkt bleibt der Einstieg; die Transportgarantie
ist stärker als ein Hostfilter. Die Lösung ist bewusst nicht vollständig
transparent: feste Reihenfolge, kein beliebiger Leafhandler und nachzuweisende
Bootstrapkompatibilität. Das ist das größte technische Freigabegate.

## Nachweis und Abnahme {#adr-0003-verification-and-acceptance}

T001, T002, T003, T004, T048, T083. Details und erwartete Ergebnisse stehen in
[06 Tests und Abnahme](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/06-verification.md). Diese Tests sind spezifiziert, nicht im Rahmen dieser
Dokumentlieferung ausgeführt.

## Anlass für Neubewertung {#adr-0003-reassessment-trigger}

Scheitert die Integrationsprobe, wird dieser ADR ersetzt. Eine unkontrollierte
`$next`-Delegation darf nicht als gleichwertige Ersatzlösung
freigegeben werden.

## Zugehörige Dokumente {#adr-0003-related-documents}

[Produktanforderungen](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/01-product-requirements.md), [Sicherheitsmodell](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/02-security-model.md), [Architektur](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/03-architecture.md), [Quellen S01-S23](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/08-evidence-and-sources.md),
[ADR-Index](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-index@0.1.4).
