Body Rewrite
Chute สามารถค้นหาและแทนที่เนื้อหาในเนื้อหาคำขอและการตอบกลับ HTTP โดยใช้นิพจน์ปกติหรือ JSONPath expressions สิ่งนี้ต้องการการถอดรหัส MitM สำหรับทราฟฟิก HTTPS
กฎ Body Rewrite ถูกกำหนดในส่วน [Body Rewrite] สามารถใช้กฎหลายตัวกับหนึ่งคำขอ
[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
รูปแบบกฎ
แต่ละกฎทำตามรูปแบบทั่วไปนี้:
<URL regex> [direction] <mode> <pattern> <replacement>
ทิศทาง
| คำสำคัญ | คำอธิบาย |
|---|---|
response |
ใช้กับเนื้อหาการตอบกลับ (ค่าเริ่มต้นหากละไว้) |
request |
ใช้กับเนื้อหาคำขอ |
โหมด
| โหมด | คำอธิบาย |
|---|---|
regex |
ค้นหาและแทนที่ด้วยนิพจน์ปกติ |
jsonpath-response / jsonpath-request / body-jsonpath-response / body-jsonpath-request |
การแก้ไขตาม JSONPath |
โหมด Regex
ดำเนินการค้นหาและแทนที่ด้วย regex มาตรฐานบนข้อความเนื้อหาที่ถอดรหัส ใช้ NSRegularExpression (ICU) พร้อมการจับคู่แบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ การแทนที่รองรับการอ้างอิงกลุ่มจับคู่ ($1, $2 ฯลฯ)
<URL regex> [response|request] regex <pattern> <replacement>
ตัวอย่าง — ลบโฆษณาจากการตอบกลับ JSON:
[Body Rewrite]
^https://api\.example\.com/feed response regex "\"ads\":\s*\[.*?\]" "\"ads\":[]"
ตัวอย่าง — ทำความสะอาดเนื้อหาคำขอ:
[Body Rewrite]
^https://api\.example\.com/submit request regex "\"password\":\s*\".*?\"" "\"password\":\"[FILTERED]\""
ตัวอย่าง — ใช้กลุ่มจับคู่เพื่อจัดรูปแบบข้อมูลใหม่:
[Body Rewrite]
// สลับ "last, first" เป็น "first last"
^https://api\.example\.com/users response regex "\"name\":\s*\"(\\w+),\\s*(\\w+)\"" "\"name\":\"$2 $1\""
ตัวอย่าง — เขียน URL ที่ฝังอยู่ในการตอบกลับใหม่:
[Body Rewrite]
^https://api\.example\.com response regex "https://old-cdn\\.example\\.com" "https://new-cdn.example.com"
โทเค็นที่มีช่องว่างต้องถูกครอบด้วยเครื่องหมายอัญประกาศคู่:
[Body Rewrite]
^https://example\.com response regex "old value with spaces" "new value"
หากต้องการรวมเครื่องหมายอัญประกาศคู่ตามตัวอักษรภายในโทเค็นที่ถูกครอบ ให้หลีกด้วยแบ็กสแลช: \"
โหมด JSONPath
แก้ไขเนื้อหา JSON โดยใช้ JSONPath expressions รองรับการอ่าน ตั้งค่า และลบค่าที่เส้นทางเฉพาะ
<URL regex> jsonpath-response|jsonpath-request jsonpath <jsonpath-expression> [value]
ไวยากรณ์ JSONPath ที่รองรับ
| Expression | คำอธิบาย |
|---|---|
$.key |
เข้าถึงคุณสมบัติของวัตถุ |
$.key.subkey |
เข้าถึงคุณสมบัติซ้อน |
$[0] |
เข้าถึงองค์ประกอบอาร์เรย์ตามดัชนี |
$.key[0].subkey |
การเข้าถึงแบบผสมระหว่างวัตถุและอาร์เรย์ |
$.items[*].name |
Wildcard: รายการทั้งหมดในอาร์เรย์ |
$.*.value |
Wildcard: คุณสมบัติทั้งหมด |
ประเภทค่า
| ค่า | ผลลัพธ์ |
|---|---|
"string" |
ตั้งค่าเป็นสตริง |
42 |
ตั้งค่าเป็นจำนวนเต็ม |
3.14 |
ตั้งค่าเป็นทศนิยม |
true |
ตั้งค่าเป็นบูลีน true |
false |
ตั้งค่าเป็นบูลีน false |
null หรือละไว้ |
ลบเส้นทาง |
ตัวอย่าง — ตั้งค่าฟิลด์ JSON:
[Body Rewrite]
^https://api\.example\.com/profile jsonpath-response jsonpath $.user.name "Anonymous"
ตัวอย่าง — ลบฟิลด์ JSON:
[Body Rewrite]
^https://api\.example\.com/data jsonpath-response jsonpath $.tracking null
ตัวอย่าง — การแก้ไขด้วย wildcard:
[Body Rewrite]
^https://api\.example\.com/list jsonpath-response jsonpath $.items[*].hidden true
ตัวอย่างการใช้งานจริง
ลบพารามิเตอร์ติดตามจากการตอบกลับ JSON
ลบฟิลด์ trackingId และ sessionId จากการตอบกลับ API ทั้งหมด:
[Body Rewrite]
^https://api\.example\.com/ jsonpath-response jsonpath $.trackingId null
^https://api\.example\.com/ jsonpath-response jsonpath $.sessionId null
แทรกแท็กสคริปต์ในการตอบกลับ HTML
เพิ่มแท็ก <script> ที่กำหนดเองก่อน </body> ในหน้า HTML ทั้งหมด:
[Body Rewrite]
^https://www\.example\.com/ response regex "</body>" "<script>console.log('injected')</script></body>"
ปกปิดฟิลด์ที่ละเอียดอ่อนในบันทึกคำขอ
แทนที่คีย์ API และโทเค็นในเนื้อหาคำขอขาออกก่อนที่จะถึงเซิร์ฟเวอร์:
[Body Rewrite]
^https://api\.example\.com/ request regex "\"apiKey\":\s*\"[^\"]+\"" "\"apiKey\":\"[REDACTED]\""
^https://api\.example\.com/ request regex "\"token\":\s*\"[^\"]+\"" "\"token\":\"[REDACTED]\""
ปรับรูปแบบวันที่ในการตอบกลับให้เป็นมาตรฐาน
แทนที่วันที่ ISO ด้วยรูปแบบที่สั้นกว่า:
[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"
ปิดใช้งานแฟล็กคุณสมบัติในการกำหนดค่าแอป
บังคับให้แฟล็กคุณสมบัติทั้งหมดเป็น false ในปลายทางการกำหนดค่า:
[Body Rewrite]
^https://api\.example\.com/config jsonpath-response jsonpath $.features[*].enabled false
เขียน URL CDN ใหม่ในการตอบกลับที่แคช
แทนที่การอ้างอิงทั้งหมดไปยัง CDN เก่าด้วย CDN ใหม่:
[Body Rewrite]
^https://www\.example\.com/ response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"
ไปป์ไลน์การประมวลผล
Body Rewrite จัดการโดยอัตโนมัติ:
- Content-Encoding: รองรับ
gzipและdeflateข้ามการเข้ารหัสที่ไม่รองรับ - Transfer-Encoding: ถอด chunked transfer encoding ก่อนการประมวลผล
- การถอดรหัส: คลายการบีบอัดเนื้อหาก่อนใช้กฎการเขียนใหม่
- การเข้ารหัสใหม่: บีบอัดเนื้อหาใหม่และอัปเดต
Content-Lengthลบส่วนหัวTransfer-Encoding
ขนาดเนื้อหาสูงสุดสำหรับการประมวลผลการเขียนใหม่คือ 128KB โดยค่าเริ่มต้น เนื้อหาที่ใหญ่กว่านี้จะถูกส่งต่อโดยไม่มีการแก้ไข
หมายเหตุ
- สำหรับทราฟฟิก HTTPS ต้องเปิดใช้งานการถอดรหัส MitM สำหรับชื่อโฮสต์ที่ตรงกัน
- การจับคู่ regex เป็นแบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ เทมเพลตการแทนที่รองรับการอ้างอิงกลุ่มจับคู่ ICU:
$0(การจับคู่เต็ม),$1(กลุ่มแรก),$2(กลุ่มที่สอง) ฯลฯ - โหมด JSONPath ใช้ได้เฉพาะเมื่อเนื้อหาเป็น JSON ที่ถูกต้อง
- กฎ Body Rewrite ถูกใช้กับเนื้อหาข้อความที่ถอดรหัส (UTF-8)
- กฎหลายตัวสามารถจับคู่และใช้กับคำขอ/การตอบกลับเดียวกัน (พวกมันถูกใช้ตามลำดับที่กำหนด)
- เมื่อกฎตั้งค่าหรือลบค่าผ่าน JSONPath ที่ไม่มีอยู่ เนื้อหาจะไม่เปลี่ยนแปลง