Waarom 'n C-struktuur 'n slegte SOCKS-versoek kan produseer
Ondersoek eksplisiete veldbredtes, greeporde en stroom-I/O in plaas daarvan om die samesteller se uitleg as die draadformaat te beskou.
'n Geldige proxy-adres maak nie 'n handgeskrewe SOCKS-boodskap geldig nie. Om 'n C- of C++-struktuur te stuur, kan opvulling of heelgetalle in gasheervolgorde stuur wat die protokol nooit aangevra het nie.
Vir 'n SOCKS5-domeinnaam-CONNECT-versoek, serialiseer hierdie volgorde eksplisiet ná metode-onderhandeling en enige gekose verifikasie:
- Weergawe, opdrag, gereserveerde greep en adrestipe
- Domeinlengte en domeingrepe
- Die tweegreep-bestemmingpoort in netwerkgreeporde
Adreslengtes hang af van die SOCKS-weergawe en adrestipe. Numeriese velde met vaste breedte benodig hul gespesifiseerde voorstelling; domeinstringe het hul eie lengte-enkodering. 'n C-string-terminator is nie 'n algemene opdrag om 'n nul by die draadboodskap te voeg nie.
| Implementeringskortpad | Probleem om te kontrolleer |
|---|---|
| Om 'n 32-bis waarde deur 'n 8-bis wyser toe te wys | Dit stuur nie al vier grepe uit nie |
| Om 'n buffer na 'n groter heelgetalwyser te cast | Belyning en greeporde moet steeds hanteer word |
| Om aan te neem een lees of skryf is een boodskap | TCP kan slegs 'n deel van die protokolvolgorde oordra |
Vergelyk elke veld met die beoogde bestemming en hanteer gedeeltelike I/O. Om twee grepe te ontvang, bewys nie dat die hele antwoord aangekom het nie. Deur daardie grense te ondersoek, kan 'n misvormde versoek onderskei word van 'n bediener wat 'n korrek beskryfde verbinding weier.