إعادة كتابة المحتوى

يستطيع Chute البحث والاستبدال في محتوى طلبات واستجابات HTTP باستخدام تعبيرات نمطية أو تعبيرات JSONPath. هذا يتطلب فك تشفير MitM لحركة HTTPS.

تُعرف قواعد إعادة كتابة المحتوى في القسم [Body Rewrite]. لكل اتجاه (request / response)، تُطبق فقط أول قاعدة مطابقة على الرسالة.

[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>

ملاحظة: يجب أن يطابق التعبير النمطي للرابط عنوان URL الكامل للطلب، وليس مجرد جزء منه. يُفضَّل عادةً إنهاء الأنماط بـ .* بحيث تُطابَق الروابط بأي مسار وسلسلة استعلام.

الاتجاه

الكلمة المفتاحية الوصف
response تطبيق على محتوى الاستجابة (الافتراضي إذا تم حذفه)
request تطبيق على محتوى الطلب

الأنماط

النمط الوصف
regex بحث واستبدال بتعبير نمطي
jsonpath-response / jsonpath-request / body-jsonpath-response / body-jsonpath-request تعديل قائم على JSONPath

نمط 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\""

مثال — إعادة كتابة الروابط المضمنة في محتوى الاستجابة:

[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. يدعم قراءة، تعيين، وحذف القيم في مسارات محددة.

<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 أو محذوف حذف المسار

ملاحظة: وضع القيمة بين علامتي اقتباس لا يفرض النوع النصي — تُزال علامات الاقتباس أثناء التقطيع ويُستنتج النوع من المحتوى المتبقي، لذا تصبح "42" العدد 42 وتصبح "true" القيمة المنطقية true. كما تُقبل الكلمة المفتاحية nil ككلمة حذف، مثل 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

إزالة حقل trackingId من جميع استجابات API. بما أن أول قاعدة مطابقة فقط تُطبق لكل اتجاه، استخدم قاعدة واحدة لكل نمط رابط:

[Body Rewrite]
^https://api\.example\.com/.* jsonpath-response jsonpath $.trackingId 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|token)\":\s*\"[^\"]+\"" "\"$1\":\"[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 في الاستجابات المخزنة مؤقتاً

استبدال جميع الإشارات إلى CDN قديم بآخر جديد:

[Body Rewrite]
^https://www\.example\.com/.* response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"

خط أنابيب المعالجة

إعادة كتابة المحتوى تتعامل تلقائياً مع:

  1. Content-Encoding: يدعم gzip و deflate. يتخطى الترميزات غير المدعومة.
  2. Transfer-Encoding: يفك ترميز chunked transfer encoding قبل المعالجة.
  3. فك الترميز: يفك ضغط المحتويات قبل تطبيق قواعد إعادة الكتابة.
  4. إعادة الترميز: يعيد ضغط المحتويات ويحدث Content-Length. يزيل ترويسة Transfer-Encoding.
  5. Accept-Encoding: عندما تطابق قاعدة استجابة رابط أحد الطلبات، تُعاد كتابة ترويسة Accept-Encoding للطلب إلى gzip, deflate, identity بحيث تبقى الاستجابة بترميز قابل للفك.

الحد الأقصى لحجم المحتوى لمعالجة إعادة الكتابة هو 128KB. المحتويات الأكبر من هذا تمر دون تعديل.


ملاحظات

  • لحركة HTTPS، يجب تفعيل فك تشفير MitM لاسم المضيف المطابق.
  • مطابقة Regex غير حساسة لحالة الأحرف. قالب الاستبدال يدعم مراجع مجموعات الالتقاط ICU: $0 (المطابقة الكاملة)، $1 (المجموعة الأولى)، $2 (المجموعة الثانية)، إلخ.
  • نمط JSONPath يطبق فقط إذا كان المحتوى JSON صالحاً.
  • قواعد إعادة كتابة المحتوى تطبق على نص المحتوى المفكوك (UTF-8).
  • تُطبق فقط أول قاعدة مطابقة لكل اتجاه (request / response) على الرسالة. عرّف قاعدة واحدة مجمّعة إذا كنت بحاجة إلى عدة تعديلات.
  • حذف مسار JSONPath غير موجود يترك المحتوى دون تغيير. تعيين قيمة ينشئ المفتاح عندما يكون الكائن الأب موجوداً؛ أما إذا كان مسار وسيط مفقوداً، فلا يحدث شيء.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-08-11 16:10:57

هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.

ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.

results matching ""

    No results matching ""