Խնդիրի էությունը կայանում է նրանում, որ frontend-ները և backend-երը հաճախ ապահովում են HTTP արձանագրության տարբեր մակարդակների աջակցություն, բայց միևնույն ժամանակ տարբեր օգտվողների հարցումները ներառում են ընդհանուր ալիքի մեջ: Frontend ստացող հարցումները և հետին պլանի մշակման հարցումները միացնելու համար ստեղծվում է երկարատև TCP կապ, որի միջոցով օգտվողի հարցումները փոխանցվում են, փոխանցվում շղթայի երկայնքով մեկը մյուսի հետևից, առանձնացված HTTP արձանագրության միջոցով: Հարցումները առանձնացնելու համար վերնագրերը «Բովանդակություն-երկարություն» (որոշում է հարցումի տվյալների ընդհանուր չափը) և «
Խնդիրն առաջանում է, եթե ճակատը աջակցում է միայն «Բովանդակության երկարությունը», բայց անտեսում է «Փոխանցում-կոդավորումը. կտրված» (օրինակ, Akamai CDN-ն դա արեց) կամ հակառակը։ Եթե «Transfer-Encoding. », «Transfer-Encoding» :[tab]chunked», «X: X[\n]Transfer-Encoding. chunked», «Transfer-Encoding[\n]: chunked» կամ «Transfer-Encoding: chunked» և backend-ը հաջողությամբ մշակում է դրանք):
Այս դեպքում հարձակվողը կարող է հարցում ուղարկել, որը պարունակում է և՛ «Բովանդակության երկարություն», և՛ «Փոխանցում-կոդավորում. կտոր» վերնագրերը, սակայն «Բովանդակության երկարությունը» չափը չի համապատասխանում կտրված շղթայի չափին, որը։ իրական արժեքից փոքր է: Եթե ֆրոնտենդը մշակում և ուղարկում է հարցումը ըստ «Բովանդակության երկարություն», իսկ հետնամասը սպասում է, որ բլոկը ավարտվի «Փոխանցում-կոդավորում. կտոր» հիման վրա, ապա «Փոխանցում-կոդավորում. կտոր» հիման վրա տվյալների ավարտը կլինի: պետք է որոշվի ավելի վաղ, և հարձակվողի խնդրանքի մնացած պոչը կլինի հաջորդ հարցման սկզբում, այսինքն. հարձակվողը կկարողանա կամայական տվյալներ կցել ուրիշի խնդրանքի սկզբին, որը փոխանցվում է հաջորդ անգամ:
Օգտագործված frontend-backend համակցության մեջ խնդիրը որոշելու համար դուք կարող եք ուղարկել այսպիսի հարցում ճակատային մասի միջոցով.
POST / HTTP/1.1-ի մասին
Հաղորդավար՝ example.com
Փոխանցում-կոդավորում՝ կտրված
Բովանդակություն - Length: 4
1
Z
Q
Խնդիրն առկա է, եթե հետնամասը անմիջապես չի մշակում հարցումը և սպասում է վերջնական զրոյական սահմանափակող բլոկի՝ մասնատված տվյալների ժամանմանը: Ավելի ամբողջական ստուգման համար
Իրական գրոհի իրականացումը կախված է հարձակման ենթարկված կայքի հնարավորություններից, օրինակ՝ Trello վեբ հավելվածի վրա հարձակվելիս կարող եք փոխարինել հարցման սկիզբը (փոխարինող տվյալներ, ինչպիսիք են «PUT /1/members/1234... x=x&csrf» =1234&username=testzzz&bio=cake») և ուղարկեք հաղորդագրություն, ներառյալ երրորդ կողմի օգտատիրոջ սկզբնական հարցումը և դրանում նշված նույնականացման «Cookie»-ը: Saas-app.com-ի վրա հարձակման համար պարզվեց, որ հնարավոր է փոխարինել JavaScript կոդը պատասխանում` այն փոխարինելով հարցման պարամետրերից մեկում: Redhat.com-ի վրա հարձակման համար օգտագործվել է ներքին մշակող՝ հարձակվողի կայք վերահղման համար («POST /search?dest=../assets/idx?redir=// ձևի հարցում»[էլեկտրոնային փոստով պաշտպանված]/ HTTP/1.1"):
Բովանդակության առաքման ցանցերի մեթոդի կիրառումը հնարավորություն տվեց պարզապես փոխարինել պահանջվող կայքը՝ փոխարինելով «Հոսթ.» վերնագիրը: Հարձակումը կարող է օգտագործվել նաև բովանդակության քեշավորման համակարգերի բովանդակությունը թունավորելու և քեշավորված գաղտնի տվյալները հանելու համար: Մեթոդի գագաթնակետը PayPal-ի վրա հարձակման կազմակերպումն էր, որը հնարավորություն տվեց գաղտնալսել օգտատերերի կողմից նույնականացման ժամանակ ուղարկված գաղտնաբառերը (iframe հարցումը փոփոխվել է՝ JavaScript-ը գործարկելու համար paypal.com/us/gifts էջի համատեքստում, որը CSP (Բովանդակության անվտանգության քաղաքականություն) չի կիրառվել):
Հետաքրքիր է, որ 2005թ
Source: opennet.ru