C언어

[C언어] gets()의 결함

_minit 2024. 10. 21. 16:14

gets 함수는 C언어에서 문자열을 입력받을 때 사용되었던 함수이다. 표준 입력(stdin)을 통해 문자열을 읽어와 사용자가 제공한 버퍼에 저장하는 간단한 기능을 한다. 예전에는 사용자로부터 데이터를 쉽게 받을 수 있는 방법으로 많이 사용되었으나, 그 과정에서 심각한 보안 문제가 있는 것이 밝혀졌다. 고1 때 C로 알고리즘을 풀며 gets를 사용했던 기억이 있다.

 

버퍼 오버플로우 위험

gets 함수의 가장 큰 문제는 버퍼 크기 제한이 없다는 것이다. 사용자가 입력할 데이터의 길이를 제한하지 않기 때문에, 할당된 버퍼 크기를 초과하는 입력을 받을 경우 버퍼 오버플로우가 발생할 수 있다. 이는 메모리 상의 다른 데이터 영역을 덮어쓰게 되어 프로그램의 정상적인 동작을 방해하거나 예기치 않은 행동을 유발할 수 있다. 공격자는 이 취약점을 이용하여 악성 코드를 삽입하거나, 프로그램의 흐름을 제어하는 등의 보안 공격을 감행할 수 있다.

 

이러한 보안 문제로 인해, C11 표준에서는 gets 함수를 표준 라이브러리에서 제거하였다. 개발자들에게 사용하지 않도록 권고되며, fgets와 같은 안전한 대안 함수를 사용할 것을 권장한다.

 

fgets 함수는 버퍼 크기와 입력 길이를 명시하도록 하여, 안전하게 데이터를 읽을 수 있게 한다.

728x90

'C언어' 카테고리의 다른 글

[C언어] 주석이란?  (0) 2024.10.22
[C언어] 단락 평가  (0) 2024.10.22
[C언어] 인라인(inline) 함수란?  (0) 2024.10.21
[C언어] 타입 한정자(type qualifiers)란?  (0) 2024.10.18
GCC(GNU Compiler Collection)란?  (0) 2024.10.18