Bayan Beast ya karanta kan amsar CONNECT na wakili, duba matsayin amsar da buffer mai motsi duka. Aikin karatu na iya ɗebowa baytoci bayan ƙarshen kan ya kuma riƙe su cikin buffer da aka bayar. Idan ka fara TLS da wani nau’in da ke karanta socket kawai, waɗannan baytocin da aka riƙe suna waje da hanyar shigar TLS.

Don rafin WebSocket wanda matakinsa na gaba shine rafin SSL, yi amfani da nau’in handshake mai buffer. A cikin zaman yield_context da ke akwai, tare da kiyaye buffer a raye a duk ayyukan:

http::response_parser<http::empty_body> response;
http::async_read_header(
    beast::get_lowest_layer(ws), buffer, response, yield[ec]);
if (ec) return;

auto status = response.get().result_int();
if (status < 200 || status >= 300) return;

std::size_t used = ws.next_layer().async_handshake(
    ssl::stream_base::client, buffer.data(), yield[ec]);
if (ec) return;
buffer.consume(used);

Komawar farko tana wakiltar hanyoyin gazawar zaman; haɗa rahoton kuskure na yau da kullum da tsaftacewa a can. Amsar CONNECT mai nasara ce kawai ke kafa ramin. Dole shafin ƙin yarda ya zama shigar TLS.

Nau’in mai buffer yana ƙarewa da lambar kuskure da adadin baytoci. Wannan adadin yana bayanin yawan baytocin da ya cinye daga buffers ɗin da aka bayar. Bayan kammalawa, cire daidai wannan prefix ɗin da consume(used). Kada ka share buffer kafin fara aikin, kada ka canza ajiyarsa yayin da handshake ke jira, kuma kada ka ɗauka cewa aikin ya cinye kowane bayt da aka bayar.

Da TLS na yau da kullum da abokin ciniki ya fara nan da nan bayan CONNECT, buffer na iya zama fanko. Nau’in yana magance wannan yanayin kuma. Manufarsa ita ce kiyaye iyakokin rafi; ba ya mai da kowane bayanan wakili na baya TLS ingantacce. Ka riƙe tabbatar da sunan masaukin manufa da tsarin SNI a kan matakin SSL kafin handshake, kuma ka fara haɓaka WebSocket bayan TLS ya yi nasara.

Labarai masu alaƙa