Bakit ang isang C struct ay maaaring gumawa ng masamang kahilingang SOCKS
Suriin ang tahasang lapad ng field, ayos ng byte at stream I/O sa halip na ituring ang layout ng compiler bilang wire format.
Ang wastong proxy address ay hindi gumagawa ng wastong mensaheng SOCKS na isinulat sa kamay. Ang pagpapadala ng C o C++ struct ay maaaring magpadala ng padding o mga integer sa host order na hindi kailanman hiniling ng protocol.
Para sa kahilingang SOCKS5 CONNECT na may domain name, i-serialize nang tahasan ang pagkakasunod-sunod na ito pagkatapos ng negosasyon ng method at anumang napiling authentication:
- Bersyon, command, reserved byte at uri ng address
- Haba ng domain at mga byte ng domain
- Ang dalawang-byte na destinasyong port sa network byte order
Ang haba ng address ay depende sa bersyon ng SOCKS at uri ng address. Ang mga numeric field na may fixed width ay nangangailangan ng tinukoy na representasyon; ang mga domain string ay may sariling encoding ng haba. Ang C string terminator ay hindi pangkalahatang tagubilin na magdagdag ng zero sa wire message.
| Shortcut sa implementasyon | Problemang kailangang suriin |
|---|---|
| Pagtatalaga ng 32-bit na halaga sa pamamagitan ng 8-bit pointer | Hindi nito inilalabas ang lahat ng apat na byte |
| Pag-cast ng buffer sa pointer ng mas malaking integer | Kailangan pa ring hawakan ang alignment at ayos ng byte |
| Pagpapalagay na ang isang pagbasa o pagsulat ay isang mensahe | Maaari lamang ilipat ng TCP ang bahagi ng pagkakasunod-sunod ng protocol |
Ihambing ang bawat field sa nilalayong destinasyon at hawakan ang partial na I/O. Ang pagtanggap ng dalawang byte ay hindi nagpapatunay na dumating ang buong tugon. Ang pagsusuri sa mga hangganang iyon ay makakapaghiwalay ng sirang kahilingan mula sa server na tumatanggi sa wastong inilarawang koneksyon.