Utente:Agnul/Sandbox/Scrap

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Forme lunghe, input non valido e considerazioni di sicurezza

[modifica | modifica wikitesto]

Il comportamento di un decoder in presenza di input non valido è pressoché indefinito. Ci sono molti modi in cui un decoder può reagire alla presenza di input non valido

  1. Inserire un carattere che rimpiazzi quello non valido (p.e. '?', '�')
  2. Saltare il carattere non valido
  3. Interpretare il carattere come proveniente da un'altro Repertorio di caratteri (spesso Latin-1)
  4. Ignorare l'errore e continuare come se il carattere fosse simile a qualche codice UTF-8 valido
  5. Segnalare un errore

I decoder potrebbero ovviamente comportarsi in modo diverso di fronte a diversi tipi di input non valido.

Tutte le possibilità hanno vantaggi e svantaggi, ma bisogna prestare particolare attenzione alla sicurezza se la verifica di validità dell'input viene compiuta prima della conversione da UTF-8.

Le forme lunghe (in cui un carattere viene codificato con più byte di quelli strettamente necessari, ma sempre nel rispetto delle regole precedenti) sono uno dei tipi di input che presentano maggiori problemi. Lo standard corrente prescrive che queste forme non vengano decodificate, ma specifiche più vecchie si limitavano a un avvertimento, e molti decoder dei più semplici procedono alla decodifica senza nessun problema. Le forme lunghe sono state usate per scavalcare i controlli di sicurezza in prodotti di alto profilo, incluso il web server IIS di Microsoft

Per mantenere la sicurezza nel caso di input non valido ci sono due opzioni. La prima è di decodificare il codice UTF-8 prima di fare qualsiasi controllo di validità necessario sull'input. La seconda è di usare un decoder più rigido, che nel caso di input non valido restituisca un errore o un testo che l'applicazione consideri innocuo.