Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C에서 예제를 사용하여 형식 문자열 취약성 및 예방

<시간/>

형식 문자열 − 문자열 형식화에 사용되는 ASCII 문자열입니다. 텍스트와 서식 매개변수로 구성된 ASCII 문자열입니다.

프로그램의 출력 형식을 위해 C에는 다양한 형식 문자열이 있습니다.

형식 문자열 취약점

프로그래머가 쉽게 만들 수 있는 프로그래밍 오류로 인해 발생하는 버그입니다. 오류가 발생하기 쉬운 코드 블로그가 printf, sprintf,와 같은 출력 함수로 전달되는 경우 etc. 그런 다음 임의의 메모리 주소에 쓰기 작업을 수행합니다.

예시

#include<stdio.h>
#include<string.h>

int main(){

   char buffer[100];
   strncpy(buffer, "Hii ", 5);
   printf(buffer);

   return 0;
}

예방

형식 문자열 취약점을 방지하기 위해 취할 수 있는 몇 가지 조치가 있습니다.

  • 데이터를 입력하는 대신 프로그램의 일부로 형식 문자열을 사용하십시오. "%s" 문자열 형식을 사용하여 쉽게 해결할 수 있습니다.

  • 형식 문자열을 생성할 때 상수를 사용하고 상수 문자열에서 사용하는 대신 모든 변수 문자열을 함수 호출의 인수로 추출합니다.

  • 상수 및 가변 문자열 초기화 규범을 따를 수 없는 경우 형식 가드가 사용됩니다.