getsの危険な使用

getsの危険な使用

説明

gets は入力長を制限できないため、入力が出力先バッファーを容易に超えてしまいます。

想定される影響

  • スタックのバッファーオーバーフロー、クラッシュ、コード実行

対処方法

fgets のように、出力先バッファーのサイズを指定できるAPIを使ってください。

例

変更前

c
char buf[32];
gets(buf);

変更後

c
char buf[32];
fgets(buf, sizeof(buf), stdin);

説明:

  • 変更前: 入力長を制限せずにバッファーへ書き込みます。
  • 変更後: 出力先配列のサイズを上限として渡します。

参考資料