- शिप
- 7 अगस्त 2026 को 4:07 am बजे UTC
- लेखक
- Kamo
- Commit
- 3c24d32
हर यूआरएल इस गेटवे बनाता है getRequestURI () से इकट्ठा किया गया है और getQueryString () - पहले से ही प्रतिशत-encoded दोनों - और फिर सौंपा गया था स्ट्रिंग के रूप में रेस्टटेम्पलेट। RestTemplate के स्ट्रिंग ओवरलोड एक यूआरएल नहीं लेते; वे एक URI TEMPLATE लेना, एक डिफ़ॉल्ट UriBuilderफैक्टरी द्वारा विस्तारित कि RestTemplate EncodingMode.URI COMPONENT में विन्यास। वह मोड हर घटक को एन्कोड करता है, और '%' एक pchar नहीं है, इसलिए एक मौजूदा भाग फिर से बच गया था: %2C %252C के रूप में छोड़ दिया। अपस्ट्रीम सर्विस को एक बार डिकोड किया गया और इसे लिटरल टोकन A%2CB मिला - एक मूल्य जहां कॉलर ने दो भेजे थे। आगे () प्रत्येक के लिए एकल फ़नल है /api/<x>/* मार्ग, तो /api/docs, /api/security, /api/kb, /api/media और बाकी सभी एक बार में प्रभावित थे; कोई आरक्षित चरित्र के साथ मान एक निश्चित बिंदु है, क्या यह intermittent बनाया है और याद करने में आसान है। ToUpstreamUri () URL और URI ओवरलोड ऑफ़ एक्सचेंज () बायपास करता है पूरी तरह से टेम्पलेट हैंडलर, इसलिए बाइट्स ने हॉप को अनटच किया। यह जानबूझकर यूआरआई के लिए सीधे स्वैप नहीं है। यह विधि एक पर THROWS चरित्र जो यूआरआई में अवैध है - एक कच्चे स्थान, ' |', '{}', एक truncated भाग — और इस तरह के एक अनुरोध ठीक उसी तरह काम करता है क्योंकि दूसरा एन्कोड इसे मरम्मत करता है। IllegalArgumentException पर, हेल्पर शून्य लौटता है और कॉलर हाथ देता है पहले के रूप में RestTemplate करने के लिए स्ट्रिंग, एक WARN यूआरएल इतना मामला नाम देने के साथ चुपके के बजाय दिखाई देता है। सही यातायात बंद हो जाता है; विकृत यातायात वास्तव में व्यवहार करता है जैसा कि उसने किया था। इस वर्ग में सभी पांच एक्सचेंज साइटें - आगे, आगे वेबहुक, आगे कॉलबैक और दो वेबहुक POST सहायक - जाओ एक एक्सचेंज अपस्ट्रीम के माध्यम से इसलिए दो एन्कोडिंग प्रति कॉल साइट को छोड़ नहीं सकते हैं। टेस्ट का दावा है कि वास्तव में RestTemplate छोड़ देता है, MockRestServiceServer के माध्यम से अकेले सहायक के रिटर्न वैल्यू के बजाय, चूंकि एन्कोडिंग अंदर होता है RestTemplate: स्थिति = लंबित%2CIN PROGRESS बिल्कुल एक स्तर के साथ आता है कहीं भी एन्कोडिंग और कोई %25 नहीं; स्ट्रिंग ओवरलोड को इस बात के रूप में पिन किया जाता है कि इसे डबल-encoded; एक कच्चे स्थान, एक truncated %2 और एक {id} brace प्रत्येक गिर वापस फेंकने के बजाय; और एक साधारण बार बार बार बार बार बार बार-बार क्वेरी को भी बदला नहीं जाता है। mvn-o test: 29 टेस्ट, 0 विफलताओं।.