카테고리 없음

CERT C - MSC 규칙 목록

flowhistory 2024. 11. 20. 13:04

MSC

Miscellaneous (MSC) - 기타
프로그램에서 발생하는 다양한 상황과 관련된 내용을 다루는 카테고리입니다.
rand() 함수를 난수 생성에 사용하지 말 것과 같은 프로그램의 안전성과 신뢰성을 높이기 위해 지켜져야 하는 규칙이 포함되어 있습니다.

 

 

Rule
Number
Rule Definition 설명
MSC04-C 주석을 일관되고 읽기 쉬운 방식으로 사용하십시오. 실수로 누락하여 실행이 실패한 경우 구문 강조 표시를 제공하거나 코드 형식을 지정하여 끝 주석 구분 기호 누락과 같은 문제를 식별하는 데 도움이 되는 편집기를 사용하는 것이 유용합니다.
끝 구분(end delimiter) 기호가 누락되면 오류가 발생하기 쉽고 실수로 간주되는 경우가 많기 때문에 코드 주석 처리에는 이 접근 방식을 권장하지 않습니다.
MSC06-C 컴파일러 최적화에 주의하세요. C 표준 [ISO/IEC 9899:2011]의 하위 조항 5.1.2.3절은 컴파일러에게 프로그램을 빌드할 때 사용되지 않거나 필요하지 않은 것으로 간주되는 코드를 제거할 수 있는 여지를 제공합니다.
이 기능은 일반적으로 유용하지만 때때로 컴파일러는 필요하지 않다고 생각하지만 특정(종종 보안 관련) 목적으로 추가된 코드를 제거합니다.
MSC17-C break 문을 사용하여 Case 레이블(label)과 관련된 모든 구문 세트를 완료합니다. switch 문은 여러 케이스 레이블과 기본 레이블로 구성됩니다. 기본 레이블은 선택 사항이지만 권장됩니다.
Case 레이블 뒤에 오는 일련의 명령문은 일반적으로 break 문으로 끝납니다. 생략하면 제어 흐름은 스위치 문 블록의 다음 사례로 넘어갑니다.
break 문은 필요하지 않으므로 이를 생략해도 컴파일러 진단이 생성되지 않습니다. 의도하지 않은 누락이 발생한 경우 예기치 않은 제어 흐름이 발생할 수 있습니다.
MSC20-C 복잡한 블록으로 제어를 전송하기 위해 switch 문을 사용하지 마십시오. 한 케이스 레이블에서 블록을 시작한 다음 블록 내에 다른 케이스 레이블을 가짐으로써 스위치 문을 코드 블록과 혼합할 수 있습니다.
블록은 둘 이상의 사례 문에 걸쳐 있는 것으로 묘사될 수 있습니다.
MSC30-C 의사 난수(Pseudorandom number)를 생성하는 데 rand() 함수를 사용하지 마십시오. 의사난수 생성기는 좋은 통계적 특성을 가진 숫자 시퀀스를 생성하기 위해 수학적 알고리즘을 사용하지만 생성된 숫자들은 본질적으로 무작위가 아닙니다.
C 표준 rand() 함수는 생성된 난수 시퀀스의 품질에 대한 보장을 제공하지 않습니다.
일부 rand() 구현체에서 생성된 숫자들은 비교적 짧은 주기를 갖고 예측 가능할 수 있습니다.
강력한 의사난수 숫자 요구 사항이 있는 응용 프로그램은 자신들의 요구 사항에 충분한 것으로 알려진 생성기를 사용해야 합니다.
MSC33-C asctime() 함수에 잘못된 데이터를 전달하지 마십시오. POSIX® 기본 사양 [IEEE Std 1003.1:2013]에서는 asctime() asctime_r() 함수에 대해 다음과 같이 설명합니다.
이러한 함수는 이전 구현과의 호환성을 위해서만 포함됩니다.
결과 문자열이 너무 길면 정의되지 않은 동작이 발생하므로 이러한 함수를 사용하지 않는 것이 좋습니다.
출력 문자열 길이 오버플로를 감지하지 못하는 구현에서는 애플리케이션이 실패하거나 시스템 보안 위반이 발생할 수 있는 방식으로 출력 버퍼가 오버플로될 수 있습니다.
또한 이러한 함수는 현지화된 날짜 및 시간 형식을 지원하지 않습니다.
이러한 문제를 방지하려면 응용 프로그램은 strftime()을 사용하여 세분화된 시간에서 문자열을 생성해야 합니다.
 
C 표준인 Annex K에서는 asctime()의 안전한 대체 수단으로 사용할 수 있는 asctime_s()도 정의합니다.
asctime() 함수는 MSC24-C에서 더 이상 사용되지 않는 함수 목록에 나타납니다.
더 이상 사용되지 않거나 더 이상 사용되지 않는 기능을 사용하지 마십시오.
MSC37-C 제어가 non-void 함수의 끝에 도달하지 않도록 하십시오. 제어가 return 문에 도달하지 않고 non-void 함수의 닫는 중괄호(})에 도달하는 경우, 함수 호출의 반환 값을 사용하는 것은 정의되지 않은 동작입니다.
728x90