_tcscpy_s 예제

명령줄 인수, 환경 변수, 콘솔 입력, 텍스트 파일 및 네트워크 연결과 같은 소스의 문자열은 외부 입력이 동작 및 출력에 영향을 줄 수 있는 수단을 제공하기 때문에 보안 프로그래밍에서 특히 중요합니다. 프로그램. 예를 들어 그래픽 및 웹 기반 응용 프로그램은 텍스트 입력 필드를 광범위하게 사용하며 XML과 같은 표준으로 인해 프로그램 간에 교환되는 데이터도 문자열 형태로 점점 더 많아지고 있습니다. 그 결과 문자열 표현, 문자열 관리 및 문자열 조작의 약점으로 인해 광범위한 소프트웨어 취약성 및 악용이 발생했습니다. printf와 같은 문자열의 서식을 지정하려면 CString::Format 함수를 사용할 수 있습니다. 예를 들어 IP 주소를 얻으려면 배열 변수는 종종 문자열 리터럴에 의해 초기화되고 문자열 리터럴의 문자 수와 일치하는 명시적 바운드로 선언됩니다. 예를 들어 다음 선언은 배열이 보유할 수 있는 것보다 한 개의 문자(„를 계산함)를 정의하는 문자열 리터럴을 사용하여 문자 배열을 초기화합니다. 좁은 문자열 또는 다중 바이트 문자열의 경우 C Standard는 wchar_t를 정수 유형으로 정의하며, 그 범위의 값은 지원되는 로캘 사이에 지정된 가장 큰 확장 문자 집합의 모든 멤버에 대해 고유한 코드를 나타낼 수 있습니다. Windows에서는 UTF-16 문자 인코딩을 사용하므로 wchar_t의 크기는 일반적으로 2바이트입니다. Linux 및 OS X(GCC/g++ 및 Xcode)는 UTF-32 문자 인코딩을 사용하므로 wchar_t의 크기는 일반적으로 4바이트입니다. 대부분의 플랫폼에서 wchar_t의 크기는 2바이트 이상이므로 wchar_t 배열의 크기는 더 이상 동일한 배열의 개수와 같지 않습니다. 그렇지 않으면 오류가 포함될 수 있다고 가정하는 프로그램입니다.

예를 들어 다음 프로그램 조각에서 strlen() 함수는 와이드 문자 문자열의 크기를 결정하는 데 잘못 사용됩니다. 예를 들어 int 형식은 EOF(음수 값) 또는 부호 가없는 char로 해석된 문자 데이터일 수 있는 데이터에 사용되어 부호 확장을 방지한 다음 int로 변환합니다. 예를 들어 int 형식이 32비트 값으로 표시되는 플랫폼에서 확장된 ASCII 코드 0xFF는 00 00 00 FF. 크기 조정 문자열이 제대로 반환되어 버퍼 오버플로 및 기타 런타임 오류를 방지하는 데 필수적입니다. 잘못된 문자열 크기는 예를 들어 부적절한 크기의 버퍼를 할당하는 경우 버퍼 오버플로로 이어질 수 있습니다. CERT C 보안 코딩 표준 [Seacord 2008], „STR31-C. 문자열에 대한 저장소에 문자 데이터와 null 종사에 대한 충분한 공간이 있는지 보장합니다.“ 배열 및 문자열의 몇 가지 중요한 속성은 공간을 올바르게 할당하고 버퍼 오버플로를 방지하는 데 중요합니다: Visual Studio Solution 탐색기의 경우 프로젝트 속성에서 유니코드를 사용하려면 „유니코드 문자 집합 사용“을 문자 집합을 설정합니다.