Body-Umschreibung
Chute kann Inhalte in HTTP-Anfrage- und Antwort-Bodys mithilfe von regulären Ausdrücken oder JSONPath-Ausdrücken suchen und ersetzen. Dies erfordert MitM-Entschlüsselung für HTTPS-Verkehr.
Body-Umschreibungsregeln werden im Abschnitt [Body Rewrite] definiert. Mehrere Regeln können auf eine einzelne Anfrage angewendet werden.
[Body Rewrite]
^https://api\.example\.com/response response regex "old-text" "new-text"
^https://api\.example\.com/request request regex "sensitive" "[redacted]"
^https://api\.example\.com/data jsonpath-response jsonpath $.ads null
Regelformat
Jede Regel folgt diesem allgemeinen Format:
<URL regex> [direction] <mode> <pattern> <replacement>
Richtung
| Schlüsselwort | Beschreibung |
|---|---|
response |
Auf Antwort-Body anwenden (Standard, wenn ausgelassen) |
request |
Auf Anfrage-Body anwenden |
Modi
| Modus | Beschreibung |
|---|---|
regex |
Regulärer Ausdruck Suchen-und-Ersetzen |
jsonpath-response / jsonpath-request / body-jsonpath-response / body-jsonpath-request |
JSONPath-basierte Änderung |
Regex-Modus
Führt standardmäßiges Regex-Suchen-und-Ersetzen auf dem dekodierten Body-Text durch. Verwendet NSRegularExpression (ICU) mit Groß-/Kleinschreibung ignorierendem Abgleich. Die Ersetzung unterstützt Capture-Group-Referenzen ($1, $2 usw.).
<URL regex> [response|request] regex <pattern> <replacement>
Beispiel — Werbung aus JSON-Antwort entfernen:
[Body Rewrite]
^https://api\.example\.com/feed response regex "\"ads\":\s*\[.*?\]" "\"ads\":[]"
Beispiel — Anfrage-Body bereinigen:
[Body Rewrite]
^https://api\.example\.com/submit request regex "\"password\":\s*\".*?\"" "\"password\":\"[FILTERED]\""
Beispiel — Capture Groups zur Neuformatierung von Daten verwenden:
[Body Rewrite]
// "Nachname, Vorname" zu "Vorname Nachname" tauschen
^https://api\.example\.com/users response regex "\"name\":\s*\"(\\w+),\\s*(\\w+)\"" "\"name\":\"$2 $1\""
Beispiel — Eingebettete URLs im Antwort-Body umschreiben:
[Body Rewrite]
^https://api\.example\.com response regex "https://old-cdn\\.example\\.com" "https://new-cdn.example.com"
Token, die Leerzeichen enthalten, müssen mit doppelten Anführungszeichen umschlossen werden:
[Body Rewrite]
^https://example\.com response regex "old value with spaces" "new value"
Um ein literales doppeltes Anführungszeichen innerhalb eines umschlossenen Tokens einzufügen, maskieren Sie es mit Backslash: \".
JSONPath-Modus
Ändert JSON-Bodys mithilfe von JSONPath-Ausdrücken. Unterstützt Lesen, Setzen und Löschen von Werten an bestimmten Pfaden.
<URL regex> jsonpath-response|jsonpath-request jsonpath <jsonpath-expression> [value]
Unterstützte JSONPath-Syntax
| Ausdruck | Beschreibung |
|---|---|
$.key |
Auf Objekteigenschaft zugreifen |
$.key.subkey |
Auf verschachtelte Eigenschaften zugreifen |
$[0] |
Auf Array-Element per Index zugreifen |
$.key[0].subkey |
Gemischter Objekt- und Array-Zugriff |
$.items[*].name |
Wildcard: alle Elemente im Array |
$.*.value |
Wildcard: alle Eigenschaften |
Werttypen
| Wert | Ergebnis |
|---|---|
"string" |
Auf Zeichenfolge setzen |
42 |
Auf Ganzzahl setzen |
3.14 |
Auf Gleitkommazahl setzen |
true |
Auf booleschen Wert true setzen |
false |
Auf booleschen Wert false setzen |
null oder ausgelassen |
Den Pfad löschen |
Beispiel — Ein JSON-Feld setzen:
[Body Rewrite]
^https://api\.example\.com/profile jsonpath-response jsonpath $.user.name "Anonymous"
Beispiel — Ein JSON-Feld löschen:
[Body Rewrite]
^https://api\.example\.com/data jsonpath-response jsonpath $.tracking null
Beispiel — Wildcard-Änderung:
[Body Rewrite]
^https://api\.example\.com/list jsonpath-response jsonpath $.items[*].hidden true
Praxisbeispiele
Tracking-Parameter aus JSON-Antworten entfernen
Entfernen Sie trackingId- und sessionId-Felder aus allen API-Antworten:
[Body Rewrite]
^https://api\.example\.com/ jsonpath-response jsonpath $.trackingId null
^https://api\.example\.com/ jsonpath-response jsonpath $.sessionId null
Ein Script-Tag in HTML-Antworten einfügen
Ein benutzerdefiniertes <script>-Tag vor </body> in allen HTML-Seiten anhängen:
[Body Rewrite]
^https://www\.example\.com/ response regex "</body>" "<script>console.log('injected')</script></body>"
Vertrauliche Felder in Anfrageprotokollen schwärzen
API-Schlüssel und Token in ausgehenden Anfrage-Bodys ersetzen, bevor sie den Server erreichen:
[Body Rewrite]
^https://api\.example\.com/ request regex "\"apiKey\":\s*\"[^\"]+\"" "\"apiKey\":\"[REDACTED]\""
^https://api\.example\.com/ request regex "\"token\":\s*\"[^\"]+\"" "\"token\":\"[REDACTED]\""
Datumsformate in Antworten normalisieren
ISO-Daten durch ein kürzeres Format ersetzen:
[Body Rewrite]
^https://api\.example\.com/ response regex "(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z" "$1/$2/$3 $4:$5"
Feature-Flags in der App-Konfiguration deaktivieren
Alle Feature-Flags in einem Konfigurationsendpunkt auf false zwingen:
[Body Rewrite]
^https://api\.example\.com/config jsonpath-response jsonpath $.features[*].enabled false
CDN-URLs in zwischengespeicherten Antworten umschreiben
Alle Verweise auf ein altes CDN durch ein neues ersetzen:
[Body Rewrite]
^https://www\.example\.com/ response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"
Verarbeitungspipeline
Die Body-Umschreibung behandelt automatisch:
- Content-Encoding: Unterstützt
gzipunddeflate. Überspringt nicht unterstützte Kodierungen. - Transfer-Encoding: Dekodiert Chunked-Transfer-Encoding vor der Verarbeitung.
- Dekodierung: Dekomprimiert Bodys vor der Anwendung von Umschreibungsregeln.
- Neukodierung: Komprimiert Bodys neu und aktualisiert
Content-Length. Entfernt denTransfer-Encoding-Header.
Die maximale Body-Größe für die Umschreibungsverarbeitung beträgt standardmäßig 128 KB. Größere Bodys werden ohne Änderung durchgeleitet.
Hinweise
- Für HTTPS-Verkehr muss die MitM-Entschlüsselung für den übereinstimmenden Hostnamen aktiviert sein.
- Der Regex-Abgleich ignoriert Groß-/Kleinschreibung. Die Ersetzungsvorlage unterstützt ICU-Capture-Group-Referenzen:
$0(vollständige Übereinstimmung),$1(erste Gruppe),$2(zweite Gruppe) usw. - Der JSONPath-Modus wird nur angewendet, wenn der Body gültiges JSON ist.
- Body-Umschreibungsregeln werden auf den dekodierten (UTF-8) Body-Text angewendet.
- Mehrere Regeln können auf dieselbe Anfrage/Antwort abgestimmt und angewendet werden (sie werden in der Reihenfolge ihrer Definition angewendet).
- Wenn eine Regel einen Wert über JSONPath setzt oder löscht, der nicht existiert, bleibt der Body unverändert.