C++ 언어 공통 취약점
C++는 C가 아니다. 이것이 무엇보다 첫 번째로 염두해야할 점이다. printf(), char*와 유사한 것들을 사용하지 말고 C++의 방향성대로 코드를 진행하자. 만약 C의 방식을 고수해야한다면 C의 보안 표준 또한 함께 참고한다.
Memory handling
malloc()과free()함수를 사용하지 않고new()와delete()함수를 사용한다. 코드에서 Exception 발생 시new에 의해 할당된 메모리는 할당 취소된다.
String handling
char*를 사용하지 않고std::string클래스를 사용한다.fscanf를 사용하지 않고std::outputstream오브젝트와 함께>>연산자를 사용한다.
File handling
fopen()함수를 사용하지 않는다. 읽기 위해서는std::ifstream를 사용한다. 쓸 때는 좀 더 복잡한 고려사항이 있는 데, C의 open 플래그 값과 함께open()호출하고 boost 라이브러리를 사용하면 파일 기술자 자체에서 좋은 스트림을 얻을 수 있다.
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream_buffer.hpp>
#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
namespace io = boost::iostreams;
class ex {};
int main ()
{
int fd = open("/my/file", O_WRONLY|O_CREAT|O_EXCL, 0600);
if (fd == -1)
throw ex();
io::stream_buffer<io::file_descriptor_sink> fp (fd);
std::ostream out(&fp);
out << "Hello, world" << std::endl;
return 0;
}