私はC/C ++でのソケットプログラミングを紹介し、ソケットを介してクライアントプログラムとサーバープログラム間でデータを交換するために使用send()
しています。recv()
TCP
これが私のコードからのいくつかの関連する抜粋です:
server.c:
char recv_data[1024];
// Socket setup and so on ommited...
bytes_recieved = recv(connected, recv_data, 1024, 0);
recv_data[bytes_recieved] = '\0';
client.c:
char send_data[1024];
// Setup ommited...
send(connected, send_data, strlen(send_data), 0);
recv()
それ自体がバッファオーバーフローに対する保護を提供しますか?たとえば、3番目の引数を(たとえば4000)recv()
が指すバッファよりも高い値に変更した場合、recv_data
これによりバッファオーバーフローが発生しますか?(私は実際にこれを試しましたが、セグメンテーション違反をトリガーできないようです)。
私は実際に、これらの問題をよりよく理解するために意図的に脆弱なサーバープログラムを作成しようとしています。そのため、を介してオーバーフローを試みましたrecv()
。
修正:
無関係ではありませんが、上記がで指定されclient.c
たバイトを超えるバイトを送信する理由を見つけることになります。標準入力からそのバッファにデータを入力するために使用していますが、標準入力を介して1024バイトを超える数を入力すると、プログラムはすべてのバイトを受信することを示します。:)。forは送信されるバイト数を制限しませんか?1024
strlen(send_data)
gets(send_data)
server.c
strlen(send_data)
send()