본문 재작성
Chute는 정규식 또는 JSONPath 표현식을 사용하여 HTTP 요청 및 응답 본문의 내용을 검색하고 교체할 수 있습니다. HTTPS 트래픽의 경우 MitM 복호화가 필요합니다.
본문 재작성 규칙은 [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 기반 수정 |
정규식 모드
디코딩된 본문 텍스트에 대해 표준 정규식 찾기 및 바꾸기를 수행합니다. 대소문자를 구분하지 않는 매칭으로 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 모드
JSONPath 표현식을 사용하여 JSON 본문을 수정합니다. 특정 경로에서 값 읽기, 설정 및 삭제를 지원합니다.
<URL regex> jsonpath-response|jsonpath-request jsonpath <jsonpath-expression> [value]
지원되는 JSONPath 구문
| 표현식 | 설명 |
|---|---|
$.key |
객체 속성 접근 |
$.key.subkey |
중첩 속성 접근 |
$[0] |
인덱스로 배열 요소 접근 |
$.key[0].subkey |
객체와 배열 혼합 접근 |
$.items[*].name |
와일드카드: 배열의 모든 항목 |
$.*.value |
와일드카드: 모든 속성 |
값 유형
| 값 | 결과 |
|---|---|
"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
예 — 와일드카드 수정:
[Body Rewrite]
^https://api\.example\.com/list jsonpath-response jsonpath $.items[*].hidden true
실용 예제
JSON 응답에서 추적 매개변수 제거
모든 API 응답에서 trackingId 및 sessionId 필드를 제거합니다:
[Body Rewrite]
^https://api\.example\.com/ jsonpath-response jsonpath $.trackingId null
^https://api\.example\.com/ jsonpath-response jsonpath $.sessionId null
HTML 응답에 스크립트 태그 삽입
모든 HTML 페이지에서 </body> 앞에 사용자 정의 <script> 태그를 추가합니다:
[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
캐시된 응답에서 CDN URL 재작성
이전 CDN에 대한 모든 참조를 새 CDN으로 교체합니다:
[Body Rewrite]
^https://www\.example\.com/ response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"
처리 파이프라인
본문 재작성은 다음을 자동으로 처리합니다:
- Content-Encoding:
gzip및deflate를 지원합니다. 지원되지 않는 인코딩은 건너뜁니다. - Transfer-Encoding: 처리 전에 청크 전송 인코딩을 디청킹합니다.
- 디코딩: 재작성 규칙을 적용하기 전에 본문의 압축을 해제합니다.
- 재인코딩: 본문을 다시 압축하고
Content-Length를 업데이트합니다.Transfer-Encoding헤더를 제거합니다.
재작성 처리를 위한 최대 본문 크기는 기본적으로 128KB입니다. 이보다 큰 본문은 수정 없이 통과됩니다.
참고
- HTTPS 트래픽의 경우, 일치하는 호스트명에 대해 MitM 복호화가 활성화되어야 합니다.
- 정규식 매칭은 대소문자를 구분하지 않습니다. 교체 템플릿은 ICU 캡처 그룹 참조를 지원합니다:
$0(전체 일치),$1(첫 번째 그룹),$2(두 번째 그룹) 등. - JSONPath 모드는 본문이 유효한 JSON인 경우에만 적용됩니다.
- 본문 재작성 규칙은 디코딩된(UTF-8) 본문 텍스트에 적용됩니다.
- 여러 규칙이 동일한 요청/응답에 일치하여 적용될 수 있습니다(정의된 순서대로 적용됨).
- 규칙이 JSONPath를 통해 존재하지 않는 값을 설정하거나 삭제하면 본문은 변경되지 않습니다.