harden: Öffentliche Endpoints — Delta-Cache-Schlüssel normalisieren, Turtle cachen (v2.34.2) - #85
Merged
Merged
Conversation
Schließt die beiden nachrangigen 'Residuals' aus dem Sicherheits-Review zu v2.33.1. Das Review fand KEINE ausnutzbare Lücke — dies ist Defense-in-Depth. - /delta-Cache-Schlüssel aus dem kanonischen UTC-Zeitstempel statt aus der rohen Eingabe. Bisher erzeugte jede Schreibweise desselben Zeitpunkts einen eigenen Transient; der Endpoint ist unauthentifiziert. - Turtle-Antworten werden gecacht. Der Katalog-Transient sparte nur die DB-Arbeit, die Serialisierung des gesamten Katalogs lief bei jedem Aufruf neu. Eigener Transient mit '_ttl'-Suffix, den die bestehende Invalidierung (delete_catalog_transients, Muster odw_catalog_%) miterfasst. Rate-Limiting bewusst nicht umgesetzt (Host-/WAF-Ebene). Tests: 2 Regressionstests, beide gegengeprüft (ohne Härtung rot). WP_REST_Response-Stub um get_data/get_headers/get_status ergänzt, damit Tests dieselben Accessoren nutzen wie serve_raw_rdf(). 190 grün, PHPCS 0, PHPStan clean. Turtle-Ausgabe byte-identisch und weiterhin DCAT-AP.de-konform. https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq
daimpad
added a commit
that referenced
this pull request
Jul 31, 2026
PR #85 wurde gemergt, während ich diese beiden Lint-Verstöße noch behoben habe — dadurch ist WPCS auf main rot. Rein redaktionell, keine Verhaltensänderung; das veröffentlichte v2.34.2-ZIP ist funktional korrekt. - class-rest-api.php: Ausrichtung eines Zuweisungsoperators (phpcbf). - test-rest-delta.php: serialize() im neuen Test annotiert. Die Ausnahme in config/phpcs.xml gilt nur für includes/class-rest-api.php; der Test spiegelt die Schlüsselbildung bewusst nach, daher ein lokaler phpcs:ignore. Ursache der wiederholten Fehlschläge: Mein lokales vendor/ lag noch auf WPCS 3.3.0. Da vendor/ seit v2.34.0 gitignoriert ist, konnte ich es jetzt folgenlos auf den Lock-Stand (3.4.1) heben — ab sofort prüfe ich lokal mit derselben Version wie die CI. Damit lokal verifiziert: PHPCS 0. 190 Tests grün, PHPStan clean. https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq Claude-Session: https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Schließt die beiden nachrangigen „Residuals" aus dem Sicherheits-Review zu v2.33.1.
1 ·
/delta-Cache-Schlüssel normalisiertDer Schlüssel entstand aus der rohen
since-Eingabe, obwohl der geparste, kanonische Wert direkt darüber bereits vorlag. Dadurch legte jede Schreibweise desselben Zeitpunkts einen eigenen Transient an:Da der Endpoint unauthentifiziert ist, ließ sich der Schlüsselraum so unnötig aufblähen. Jetzt bildet der kanonische UTC-Zeitstempel den Schlüssel — der Raum ist auf tatsächlich verschiedene Zeitpunkte begrenzt.
2 · Turtle-Serialisierung wird gecacht
Der Katalog-Transient sparte bislang nur die Datenbankarbeit. Die Serialisierung des gesamten Katalogs nach Turtle lief dagegen bei jedem Aufruf neu — auch bei Cache-Treffer. Auf einem unauthentifizierten Endpoint ist das unnötige CPU-Last pro Anfrage.
Das serialisierte Dokument liegt jetzt in einem eigenen Transient mit
_ttl-Suffix. Weil der Schlüssel weiterhin mitodw_catalog_beginnt, wird er von der bestehenden Cache-Invalidierung (delete_catalog_transients, Musterodw_catalog_%) automatisch miterfasst — es gibt also keinen zweiten Invalidierungspfad, der veralten könnte.Bewusst nicht umgesetzt
Rate-Limiting — das gehört auf Host-/WAF-Ebene, nicht in ein WordPress-Plugin. (Die dritte Residual-Idee aus dem Review.)
Tests / Qualität
WP_REST_Response-Stub umget_data(),get_headers()undget_status()ergänzt, damit Tests dieselben Zugriffsmethoden nutzen wie der Produktivcode (serve_raw_rdf()).Conforms: True— die Härtung ändert nichts am ausgelieferten Dokument.🤖 Generated with Claude Code
https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq
Generated by Claude Code