Il carattere null (anche terminatore null) è un carattere di controllo con valore zero. È presente in molti set di caratteri, inclusi quelli definiti dai codici Baudot e ITA2, ISO/IEC 646 (o ASCII), il codice di controllo C0, l'Universal Coded Character Set (o Unicode) e EBCDIC. È disponibile in quasi tutti i principali linguaggi di programmazione."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." — ANSI/ISO 9899:1990 (the ANSI C standard), section 5.2.1 È spesso abbreviato come NUL (o NULL anche se in alcuni contesti quel termine viene utilizzato per il puntatore nullo, un oggetto diverso). Nei codici a 8 bit, è noto come byte nullo.
Il significato originale di questo carattere era come l'istruzione NOP — quando inviata ad una stampante o un terminale, non fa nulla (alcuni terminali, tuttavia, lo visualizzano erroneamente come spazio). Sul nastro perforato, il carattere è rappresentato senza alcun foro, quindi un nuovo nastro non perforato viene inizialmente riempito con caratteri nulli e spesso il testo potrebbe essere "inserito" in uno spazio riservato di caratteri null perforando i nuovi caratteri nel nastro sopra i null.
Oggi il carattere ha molto più significato in C, nei suoi derivati e in molti formati di dati, dove funge da carattere riservato utilizzato per indicare la fine di una stringa,"A string is a contiguous sequence of characters terminated by and including the first null character" — ANSI/ISO 9899:1990 (the ANSI C standard), section 7.1.1 spesso chiamata stringa null-terminata. Ciò consente alla stringa di essere di qualsiasi lunghezza con solo l'aggiunta di un byte; l'alternativa di memorizzare un conteggio richiede un limite di lunghezza della stringa di 255 o un sovraccarico di più di un byte (ci sono altri vantaggi/svantaggi descritti nell'articolo relativo alle stringhe null-terminate).
Rappresentazione Il carattere null è spesso rappresentato come sequenza di escape \0 nel codice sorgente, nelle stringhe letterali o nelle costanti di caratteri.Kernighan and Ritchie, C, p. 38 In molti linguaggi (come il C, che ha introdotto questa notazione), questa non è una sequenza di escape separata, ma una sequenza di escape ottale con una singola cifra ottale 0; di conseguenza \0 non deve essere seguito da nessuna delle cifre da 0 a 7 ; altrimenti verrebbe interpretato come l'inizio di una sequenza di escape ottale più lunga.In YAML this combination is a separate escape sequence. Altre sequenze di escape che si trovano in uso in vari linguaggi sono \000, \x00, \z o \u0000 . Un carattere null può essere inserito in un URL con il codice percentuale %00.
La capacità di rappresentare un carattere null non significa sempre che la stringa risultante verrà interpretata correttamente, poiché molti programmi considereranno il null come la fine della stringa. Pertanto, la possibilità di digitarlo (in caso di input dell'utente non controllato) crea una vulnerabilità nota come iniezione di byte nulli e può portare a exploit di sicurezza.Null Byte Injection WASC Threat Classification Null Byte Attack section.
Nella notazione caret il carattere null è ^@ . Su alcune tastiere, è possibile inserire un carattere null tenendo premuto e premendo (su layout USA , non è necessario per ottenere il simbolo @).
Nella documentazione, il carattere null è talvolta rappresentato come un simbolo di larghezza un em contenente le lettere "NUL". In Unicode, c'è un carattere con un glifo corrispondente per la rappresentazione visiva del carattere null, "simbolo per null", U+2400 (␀), da non confondere con il carattere null effettivo, U+0000.
Codifica In tutti i set di caratteri moderni il carattere null ha un valore in punto di codice pari a zero. Nella maggior parte delle codifiche, questo viene tradotto in una singola unità di codice con un valore zero. Ad esempio, in UTF-8 è un singolo byte zero. Tuttavia, nell'UTF-8 modificato il carattere null è codificato come due byte: 0xC0, 0x80. Ciò consente al byte con valore zero, che ora non viene utilizzato per nessun carattere, di essere utilizzato come terminatore di stringa.
Note
Categoria:Tecniche di attacco informatico Categoria:Caratteri di controllo