2014-10-24 2 views
0

Wikipedia : 컴퓨팅에서 버퍼 언더런 또는 버퍼 언더 플로는 두 장치 또는 프로세스간에 통신하는 데 사용되는 버퍼에 데이터가있는 속도보다 느린 속도로 데이터가 공급 될 때 발생하는 상태입니다 그것으로부터 읽혀지고있다.C 버퍼 언더 플로 정의 및 관련 위험

Apple의 보안 코딩 가이드 : 근본적으로 버퍼 언더 플로우는 코드의 두 부분에서 버퍼의 크기 또는 해당 버퍼의 데이터가 일치하지 않을 때 발생합니다. 예를 들어 고정 길이 C 문자열 변수는 256 바이트의 공간을 가질 수 있지만 길이가 12 바이트 인 문자열을 포함 할 수 있습니다.

Apple의 정의는 버퍼 오버플로에 대한 개념을 보완합니다.

  1. 기술적으로 더 좋은 정의는 무엇입니까?
  2. 버퍼 언더 플로가 주요 보안 문제입니까? 직렬 포트 또는 소켓 (비록 내가 bzero()를 사용하지만)에서 폴링하고 읽을 수있는 큰 버퍼를 사용하는 습관이있다. 이것이 옳은 일입니까?

답변

2
  1. 사람들은 단어의 두 개의 다른 사용법은 "언더"입니다. 그들이 두 가지 다른 것을 설명하고 있기 때문에 기술적 인 건전성을 비교할 수는 없다고 생각합니다.

  2. 애플의 정의에 따라 버퍼 언더 플로우가 약점이 될 수 있습니다. http://cwe.mitre.org/data/definitions/124.html을 참조하십시오.

2

2) '나는 bzero()를 사용합니다. 이게 옳은 일입니까? '

거의 확실하게 없습니다. 시스템 호출은 수신 된 바이트 수를 리턴합니다. null이 포함되지 않은 텍스트 스타일의 데이터를 수신하려고하고 C 스타일의 문자열 lib 호출을 사용하려는 경우 버퍼 끝에 null을 하나만 푸시합니다. thare가 null을위한 충분한 공간인지 확인하기 위해 선언 된 버퍼 길이보다 하나 적은 바이트). 다른 모든 경우에는 터미네이터를 전혀 신경 쓸 필요가 없습니다. 그것은 무의미하거나 위험 할 것입니다.

bzero()는 네트워크 버퍼의 경우 순환을 낭비하는 것입니다. 얼마나 많은 웹 페이지 예제가 있는지, 또는 얼마나 많은 소스가 'vars/버퍼를 초기화해야하는지'에 대해 신경 쓰지 않습니다. 쓰레기 야.

관련 문제