scanf와 scanf_s의 차이점
- 카테고리 없음
- 2013. 4. 11. 22:52
scanf와 scanf_s의 차이점
scanf는 예전부터 써오던 standard console io(stdio)의 input 함수입니다. 이 함수는 참 범용적으로 사용되는데, 최근 몇 년동안 보안의 문제에 직면하면서 수정을 가한 것이 scanf_s입니다. scanf_s는 scanf와 거의 똑같지만, character와 character pointer를 입력받는 경우는 버퍼의 크기를 하나 더 적어 넣어줘야 합니다.
char c;
char s[10];
scanf("%c %s", &c, 1, s, 10);
그 이유는 버퍼 오버런, 버퍼 오버플로우를 이용한 공격을 방어하는 목적입니다. 좀 자세히 설명하면, 버퍼의 크기를 정해주지 않는 경우, 그 버퍼에 실행코드를 함께 넣으면서, 그 실행코드로 jump하게하는 기술을 사용하면, scanf등을 이용해 입력을 받는 프로그램을 통해 외부의 실행코드가 실행될 수 있게 되고, 그 실행으로 바이러스를 옮기는 등의 악성 프로그램을 실행하게 될 수 있습니다. 이런 것을 막기위해 많은 standard C의 함수들이 보안 기능(security --> 그래서 s가 붙지요)을 추가한 함수로 변경되고 있습니다.
이 글을 공유하기