[Schema] SEP-2106: Harden SchemaValidator against external $ref SSRF and composition DoS

Offen
#358 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
48/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Ruhig
Tech-Stack
php

Rechercherichtung

Beginne bei SchemaValidator und untersuche die bestehende session-store-DoS-Limitkonfiguration im Hinblick auf die vorgesehene Handhabung der Limits und die Standardwerte. Überprüfe die aktuelle $ref-Behandlung und füge anschließend adversariale Regressionstests für externe Referenzen, tiefe Verschachtelung, eine große Anzahl von Subschemas und die Validierungszeit hinzu; als abgeschlossen gilt die Aufgabe, wenn externe, nicht auf dasselbe Dokument verweisende Referenzen standardmäßig blockiert werden und die Limits konfigurierbar sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

2026-07-28 enhancement improves spec compliance Schema

Implements the security hardening portion of SEP-2106 for the MCP Spec 2026-07-28 release.

Tracked by umbrella #337.

Spec rationale

Once $ref and rich composition land in inputSchema/outputSchema, naive validators are exposed to: SSRF via external $ref URIs, and DoS via pathological compositions / deep nesting / large subschema counts.

PHP SDK changes

  • SchemaValidator MUST NOT auto-dereference external $ref URIs (block any non-same-document reference by default).
  • Bound: schema depth, subschema count, validation time.
  • Configurable limits with sensible defaults (mirror existing session-store DoS limit ergonomics).
  • Add regression tests with adversarial schemas.

Related

  • Umbrella #337
  • Vocabulary sub-issue (introduces $ref support that this hardens)
Vorherrschende Sprache
PHP
Sterne
1.6k
Forks
173
Ø Merge
2 T. 49 Min.
Gemergte PRs (30 T.)
23

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus modelcontextprotocol/php-sdk

Alle Issues in modelcontextprotocol/php-sdk

Ähnliche Issues

Weitere Issues zu PHP

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.