맨위로가기

널 문자

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

널 문자는 소스 코드에서 `\0`, `\x00` 등으로 표현되며, 대부분의 현대 문자 집합에서 코드 포인트 값 0을 가진다. C 언어와 C++에서는 문자열의 끝을 나타내는 중요한 역할을 하며, 널 종료 문자열로 불린다. 널 문자는 널 바이트 삽입 공격에 취약할 수 있으며, 유니코드에서는 널 문자(U+0000)와 널 기호(U+2400, ␀)가 별개의 문자로 정의된다.

더 읽어볼만한 페이지

  • 제어 문자 - 공백 문자
    공백 문자는 단어를 구분하고 텍스트의 구조를 나타내기 위해 사용되며, 언어와 컴퓨터 환경에 따라 다양한 형태로 존재하고 활용된다.
  • 제어 문자 - 이스케이프 시퀀스
    이스케이프 시퀀스는 컴퓨터 주변 장치의 상태를 변경하는 문자열로, 초기 보도 코드에서 시작하여 ASCII 표준을 거쳐 발전했으며 터미널, 프린터, 모뎀 제어 등에 사용되고, C 언어에서는 백슬래시를 사용하여 특수 문자를 표현한다.
  • 취약점 공격 - 보안 취약점
    보안 취약점은 시스템의 설계, 구현, 운영, 관리상 결함이나 약점으로, 위협에 의해 악용되어 시스템 보안 정책을 위반할 수 있는 요소이며, ISO 27005, IETF RFC 4949, NIST SP 800-30, ENISA 등 다양한 기관에서 정의하고 있다.
  • 취약점 공격 - 인터넷 보안
    인터넷 보안은 사이버 위협, 악성 소프트웨어, 서비스 거부 공격 등으로부터 정보와 시스템을 보호하기 위해 네트워크 계층 보안, 다단계 인증, 방화벽 등 다양한 기술과 방법을 포괄한다.
널 문자
기본 정보
널 문자의 다양한 표현
널 문자의 다양한 표현
유니코드 이름Null
유니코드 번호U+0000
HTML 엔티티
C 표현\0
아스키 코드0
일반적인 사용
용도문자열 종료
패딩
표현보이지 않는 문자
동작아무런 동작도 수행하지 않음
역사
기원텔레타이프 기계에서 라인 피드 또는 캐리지 리턴과 같은 제어 문자를 보내는 데 걸리는 시간을 채우기 위해 도입됨.
펀치 카드 시스템에서 빈 공간을 표시하는 데 사용됨.
프로그래밍 언어에서의 사용
C/C++널 문자는 문자열의 끝을 나타내는 데 사용됨.
자바자바 문자열은 널 문자로 끝나지 않음.
기타 언어다양한 방식으로 널 문자를 처리함.
보안 문제
널 문자 삽입 공격널 문자를 입력값에 삽입하여 예상치 못한 동작을 유발할 수 있음.
기타
참고널 포인터와 혼동하지 말 것.

2. 표현

소스 코드에서 널 문자는 문자열 리터럴에서 이스케이프 시퀀스 `\0`으로 표현되는 경우가 많다.[8] 이는 C 언어를 포함한 많은 언어에서 사용되는 표기법이다. `\0`은 단순히 8진수 0을 나타내는 이스케이프 시퀀스이며, 뒤에 0부터 7까지의 숫자가 올 수 없다.[9] 다른 이스케이프 시퀀스로는 `\000`, `\x00`, `\z`, `\u0000` 등이 있다.

URL에서는 널 문자를 퍼센트 인코딩으로 표현하여 `%00`으로 나타낸다. 이는 널 바이트 삽입 공격을 방지하기 위함이다.[10]

캐럿 표기법에서는 널 문자를 `^@`로 표현한다. 일부 키보드에서는 Ctrl 키와 @ 키를 함께 눌러 널 문자를 입력할 수 있다.

문서에서는 널 문자를 "NUL" 기호(␀, 유니코드 U+2400)로 시각적으로 표현하기도 한다.

3. 인코딩

모든 현대 문자 집합에서 널 문자는 코드 포인트 값이 0이다. 대부분의 인코딩에서 이는 값이 0인 단일 코드 단위로 변환된다. 예를 들어, UTF-8에서는 단일 0 바이트이다. 그러나 수정된 UTF-8에서는 널 문자가 두 바이트 0xC0,0x80영어로 인코딩된다. 이렇게 하면 0x00 바이트를 문자열 종결자로 사용할 수 있다.[15][16][17][18][19]

4. 프로그래밍 언어에서의 널

C 언어와 C++에서 널 문자는 문자열의 끝을 나타내는 널 종료 문자열(null-terminated string)을 만드는 데 사용된다[15]. 즉, 문자열 마지막에 널 문자를 넣어 문자열의 끝을 표시한다. Java, .NET 등에서는 문자열이 길이 정보를 포함하는 데이터 구조로 표현되므로, 널 문자가 문자열 중간에 포함될 수 있다.

포인터 값이 널인 널 포인터는 아무것도 가리키지 않는 포인터를 나타낸다. 보통 메모리 주소 0을 사용하며, 이 주소를 읽으려고 하면 대부분의 운영 체제는 오류를 발생시킨다.

일부 언어에서는 0, '', "" 등이 널(NULL)과 같은 의미로 사용되기도 한다.

널 문자는 전신 타자기를 컴퓨터 출력 장치로 사용할 때 각 행의 끝에 추가되어 인쇄 기구가 행의 시작 부분으로 돌아갈 시간을 벌어주는 역할도 했다.

4. 1. 널 문자와 관련된 문제점

널 문자는 많은 프로그램에서 문자열의 끝으로 간주되므로, 이를 악용하여 '''널 바이트 삽입'''이라는 취약점을 만들 수 있으며, 이는 보안 익스플로잇으로 이어질 수 있다.[10]

이러한 특성 때문에 널 문자를 포함하는 데이터를 올바르게 처리하지 못하는 시스템도 있다. 예를 들어, CSS 2.1에서는 스타일 시트에 널 문자가 포함될 경우(이스케이프를 통해 생성된 경우 포함)의 동작이 정의되지 않았다.[19]

5. 널 바이트 공격과 보안

확인되지 않은 사용자 입력으로 널 문자를 입력할 수 있는 것은 '''널 바이트 삽입'''이라고 하는 취약점을 만들어 보안 익스플로잇으로 이어질 수 있다.[10] 널 바이트 삽입은 악의적인 사용자가 널 문자를 입력하여 시스템의 보안을 뚫는 공격 방법이다. 대한민국 정보보호 관련 기관들은 널 바이트 공격을 포함한 다양한 보안 위협에 대한 대응책을 마련하고 있다.

6. 유니코드

유니코드에서 널 문자(U+0000)와 널 기호(U+2400, ␀)는 별개의 문자이다.[21] 널 기호는 널 문자를 시각적으로 표현하기 위한 것이다.[21]

기호유니코드JIS X 0213문자 참조명칭
U+0000널 문자
U+2400널 기호


참조

[1] 간행물 ASCII format for Network Interchange IETF
[2] 웹사이트 The set of control characters of the ISO 646 http://kikaku.itscj.[...] Secretariat ISO/TC 97/SC 2 1975-12-01
[3] 웹사이트 Unicode Character 'NULL' (U+0000) https://www.fileform[...] 2018-10-20
[4] 웹사이트 C0 Controls and Basic Latin https://www.unicode.[...] Unicode Consortium 2018
[5] 문서 "A byte with all bits set to 0, called the ''null character'', shall exist in the basic execution character set; it is used to terminate a character string literal."
[6] 문서 "A ''string'' is a contiguous sequence of characters terminated by and including the first null character"
[7] ISO 14882 standard working draft Working Draft, Standard for Programming Language C++ http://www.open-std.[...] ISO/IEC 2013-02-27
[8] 서적 C
[9] 문서 In YAML this combination is a separate escape sequence. http://www.yaml.org/[...]
[10] 웹사이트 Null Byte Injection http://projects.weba[...]
[11] 웹사이트 ASCII format for Network Interchange https://datatracker.[...] 2013-08-03
[12] 문서 "A byte with all bits set to 0, called the ''null character'', shall exist in the basic execution character set; it is used to terminate a character string literal."
[13] 웹사이트 空文字(ヌル文字 / NUL)とは - IT用語辞典 e-Words https://e-words.jp/w[...]
[14] 웹사이트 null characterの意味・使い方|英辞郎 on the WEB https://eow.alc.co.j[...]
[15] 문서 "A ''string'' is a contiguous sequence of characters terminated by and including the first null character"
[16] 웹사이트 Working Draft, Standard for Programming Language C++ (ISO/IEC 14882 standard working draft: N3337) - §17.5.2.1.4.1 Byte strings https://www.open-std[...] ISO/IEC 2012-01-16
[17] 웹사이트 MAN page of FIND http://linuxjm.sourc[...]
[18] 웹사이트 Man page of FIND https://linuxjm.sour[...]
[19] 웹사이트 4.1.3 Characters and case - Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification https://www.w3.org/T[...] W3C 2013-09-29
[20] 서적 C
[21] 웹사이트 Null Byte Injection http://projects.weba[...]
[22] 웹사이트 http://krdic.naver.c[...]
[23] 웹사이트 http://tools.ietf.or[...]
[24] 웹인용 보관된 사본 http://www.itscj.ips[...] 2012-08-15
[25] 문서 "A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string literal."



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com