کلاسیک CL.TE — تفسیر متفاوت طول بدنه بین فرانتاند و بکاند
وقتی یک سرور از Content-Length و دیگری از Transfer-Encoding برای تعیین مرز درخواست پیروی میکند.
اگر یک درخواست همزمان هدرهای Content-Length و Transfer-Encoding: chunked را داشته باشد، و سرور فرانت (پراکسی) طبق Content-Length بخشی از بدنه را بخواند در حالی که بکاند طبق Transfer-Encoding کل بدنهی chunked را پردازش میکند، بخشی از بدنهی شما میتواند به ابتدای درخواست کاربر بعدی روی همان اتصال persistent «ضمیمه» شود.
چرا خطرناک است
این میتواند به سرقت پاسخ یا حتی درخواست کاربر بعدی (شامل کوکی نشست او)، دور زدن کنترل دسترسی لایهی پراکسی، یا مسمومکردن یک پاسخ کششده برای همهی کاربران منجر شود.
راهحل
نرمالسازی کامل هدرهای طول بدنه در اولین لایهی دریافتکننده (رد کردن هر درخواستی با هر دو هدر همزمان)، و در صورت امکان، استفاده از HTTP/2 end-to-end که اصلاً این کلاس آسیبپذیری را ندارد.