2013-05-01 11 views
-2

"% s"대신 "% 1024s"를 사용하면 보안 구멍이 코드에서 만들어지지 않습니다. "% 1024s"과 (과) "% s"의 차이점은 무엇입니까?% s와 % 1024 사이의 차이

+0

이 예방에 도움이됩니다. http://en.wikipedia.org/wiki/Stack_buffer_overflow –

+0

바로 '%'와 's' 사이에 숨겨진 보안 구멍이 있습니다. 그것을 연결하려면 정확히 4 바이트가 필요합니다. –

답변

2

scanf()에는 아마도?

So you can and you should read its man page.

는 기본적 %1024s는, 문자열의 길이가 1,024 문자 피주 최대화 그것이 1,025 바이트 길이 버퍼 (0 종결 1024 + 1)에 항상 맞 그래서. %s에는이 제한이 없으므로 버퍼가 문자열 scanf()이 내부에 넣으려는 것보다 작 으면 버퍼 오버런이 발생하고 프로그램에서 정의되지 않은 동작을 호출합니다.

+1

2013 POSIX 버전의 링크가 업데이트되었습니다. 공개되었지만 사이트가 너무 가볍게 구성되어 찾기가 어렵습니다. @larsmans 감사합니다. –

+0

내가 연계 한 것은 첫 번째 Google 히트 곡이었습니다. –

+0

' "% 1024s"'를 사용하려면 1025 자의 공백이있는 배열이 필요합니다. '\ 0'종료는 1024 내에서 카운트되지 않지만 모든 aray에 기록됩니다. – pmg