[c언어] 시큐어 코딩 가이드라인과 C 언어
C 언어는 널포인터 디레퍼런싱, 버퍼 오버플로우, 형 변환 문제 등 다양한 보안 취약점이 있어 안전한 코드 작성에 주의가 필요합니다.
1. 널포인터 디레퍼런싱
C 언어에서는 포인터를 조작하는 과정에서 널포인터 디레퍼런싱이 발생할 수 있습니다. 이를 방지하기 위해 포인터 사용 전 유효성 검사를 수행해야 합니다.
if(ptr != NULL) {
// 포인터 사용
}
2. 버퍼 오버플로우
C 언어에서는 배열의 크기를 넘어서는 값을 저장하면 버퍼 오버플로우가 발생합니다. 이를 방지하기 위해 정적 배열 대신 동적 할당을 사용하고, 글로벌 버퍼의 사용을 최소화해야 합니다.
// 정적 배열
char buffer[100];
// 동적 할당
char *buffer = (char*)malloc(100);
3. 형 변환 문제
C 언어의 형 변환은 데이터 손실을 유발할 수 있어 조심해야 합니다. 암시적 변환 대신 명시적 변환을 사용하고, 데이터 손실 가능성을 고려하여 코드를 작성해야 합니다.
float f = 3.14;
int i = (int)f; // 명시적 변환
안전한 C 코드를 작성하기 위해서는 위와 같은 시큐어 코딩 가이드라인을 준수해야 합니다.
참고문헌:
- “Secure Coding in C and C++” by Robert C. Seacord
- “C 언어 바이블” by 정요한, 이상길