소프트웨어 개발(SW Dev)/Rule(CERT C)
CERT C - STR 규칙 목록
flowhistory
2024. 11. 12. 12:47
STR
Characters and Strings (STR) - 문자와 문자열
문자열 조작에 관련된 내용을 다루는 카테고리입니다.
문자열 조작 함수의 안전한 사용과 버퍼 오버플로우(buffer overflow) 방지에 대한 규칙이 포함되어 있습니다.
Rule Number | Rule Definition | 설명 |
STR03-C | 실수로 문자열을 자르지 마십시오. | 버퍼 오버플로 취약성을 완화하기 위해 복사된 바이트 수를 제한하는 대체 기능이 권장되는 경우가 많습니다. strncpy() instead of strcpy() strncat() instead of strcat() fgets() instead of gets() snprintf() instead of sprintf() 이러한 함수는 지정된 제한을 초과하는 문자열을 자릅니다. |
STR06-C | strtok()가 구문 분석 문자열을 변경하지 않고 그대로 둔다고 가정하지 마십시오. | C 함수 strtok()는 두 개의 인수, 즉 구문 분석할 초기 문자열과 const 한정 문자 구분 기호를 사용하는 문자열 토큰화 함수입니다. 토큰의 첫 번째 문자에 대한 포인터를 반환하거나 토큰이 없는 경우 널 포인터에 대한 포인터를 반환합니다. strtok()이 처음 호출되면 문자열이 토큰과 문자 구분 기호로 구문 분석됩니다. strtok() 함수는 구분 기호 문자의 첫 번째 인스턴스까지 문자열을 구문 분석하고 해당 문자를 널 바이트('\0')로 대체하고 토큰의 첫 번째 문자 주소를 반환합니다. strtok()에 대한 후속 호출은 가장 최근에 배치된 널 문자 바로 뒤에서 구문 분석을 시작합니다. |
STR07-C | 문자열 조작에는 경계 검사 인터페이스(bounds-checking interface)를 사용하십시오. | C 표준, 부록 K(규범)는 기존 함수를 보다 안전하게 대체하도록 설계된 표준 문자열 처리 함수의 대체 버전을 정의합니다. 예를 들어, strcpy(), strcat(), strncpy() 및 strncat()를 각각 대체하는 함수로 strcpy_s(), strcat_s(), strncpy_s() 및 strncat_s() 함수를 정의합니다. |
STR31-C | 문자열 저장 공간에 문자 데이터와 Null 종결자를 위한 충분한 공간이 있는지 보장합니다. | 데이터를 저장할 만큼 크지 않은 버퍼에 데이터를 복사하면 버퍼 오버플로가 발생합니다. 문자열을 조작할 때 버퍼 오버플로가 자주 발생합니다[Seacord 2013b]. 이러한 오류를 방지하려면 잘림을 통한 복사를 제한하거나 대상의 크기가 복사할 문자 데이터와 Null 종료 문자를 보유할 만큼 충분한지 확인하는 것이 좋습니다. (STR03-C를 참조하십시오. 실수로 문자열을 자르지 마십시오.) |
STR38-C | narrow 문자열과 wide 문자열 및 함수를 혼동하지 마십시오. | 좁은 문자열 인수를 넓은 문자열 함수에 전달하거나 넓은 문자열 인수를 좁은 문자열 함수에 전달하면 예상치 못한 정의되지 않은 동작이 발생할 수 있습니다. 넓은 문자와 좁은 문자의 크기 차이로 인해 크기 조정 문제가 발생할 수 있습니다. (ARR39-C를 참조하십시오. 포인터에 스케일링된 정수를 더하거나 빼지 마십시오.) 와이드 문자열은 널 와이드 문자로 끝나고 널 바이트를 포함할 수 있으므로 길이를 결정하는 것도 문제가 됩니다. |
728x90