[c] gets 함수

Gets 함수란

gets 함수는 C 언어에서 사용되는 입력 함수입니다. 이 함수를 사용하면 사용자로부터 키보드로 입력을 받을 수 있습니다. 입력을 받을 때 공백을 포함한 여러 개의 단어를 한 줄에 입력받을 수 있어서 유용하게 사용됩니다.

그러나 gets 함수는 입력값의 길이를 확인하지 않고 입력을 받기 때문에 버퍼 오버플로우 공격에 취약합니다. 따라서, gets 함수는 보안 상의 이유로 권장되지 않는 함수로 간주됩니다. 대신, fgets 함수를 사용하여 입력을 받는 것이 안전합니다.

예시 코드

#include <stdio.h>

int main() {
   char name[50];
   
   printf("이름을 입력하세요: ");
   gets(name);
   
   printf("당신의 이름은 %s입니다.", name);
   
   return 0;
}

주의 사항

gets 함수를 사용할 때에는 사용자가 입력하는 데이터의 길이를 검사하지 않기 때문에, 입력과정에서 버퍼 오버플로우가 발생할 수 있습니다. 따라서 gets 대신에 fgets 함수를 사용하여 안전하게 입력을 받아야 합니다.


본 포스트는 C 언어의 gets 함수에 대해 설명하였습니다. 입력 함수를 사용할 때 취약점에 유의하여 코드를 작성하고, 안전한 함수를 사용하여 보안에 신경을 써야 함을 기억해야 합니다.

위의 내용은 David R. Hanson의 “C Interfaces and Implementations” 책의 내용을 참고하여 작성하였습니다.