2009-07-22 22 views

risposta

8

La canonizzazione è il processo mediante il quale si immette un input, ad esempio un nome di file o una stringa, e lo si trasforma in una rappresentazione standard.

Ad esempio se l'applicazione Web consente solo l'accesso ai file in C: \ websites \ mydomain, in genere qualsiasi input che fa riferimento a nomi di file è canonicizzato per essere un percorso fisico diretto, piuttosto che uno che utilizza percorsi relativi. Se si desidera aprire C: \ websites \ mydomain \ example \ example.txt, un input in tale funzione potrebbe essere esempio \ esempio.txt. È difficile capire se questo va oltre i confini del tuo sito web, quindi la funzione di canonicalizzazione dovrebbe guardare la directory dell'applicazione e cambiare quel percorso relativo in uno fisico, C: \ websites \ mydomain \ example \ example.txt. Questo è ovviamente più facile da verificare, come si fa semplicemente una stringa confrontare all'inizio del percorso del file.

Per gli input HTML si prendono input come% 20 e li si canonicalizzano tramite unencoding, quindi questo si trasformerebbe in uno spazio. Questa è una buona idea dato che il numero di modi diversi di codifica è elevato, la canonicalizzazione significa che verificherai solo la stringa decodificata, piuttosto che cercare di coprire tutte le varianti di codifica.

Fondamentalmente si sta prendendo input che è logicamente equivalente e convertendoli in un modulo standard su cui è possibile agire.

+0

quindi potenzialmente in un campo di input potrei provare a fare un attacco SQL injection o un possibile XSS per bypassare la normale sanitizzazione delle stringhe? – predhme

+1

L'igiene è diversa. Generalmente un attacco SQL injection non utilizzerà la codifica, quindi non si tratta di un problema di canonicalizzazione. XSS può essere, dipende da quello che fai. Se si codifica tutto l'input prima di emetterlo, no, non lo è. Tuttavia, se si sta tentando di creare una lista bianca o una lista nera peggiore di certe parti di una stringa, è necessario innanzitutto inizializzare la stringa perché, ad esempio,

-4

Canonico (penso) significa che l'input della console è "comportamento tipico". Non canonico significa che l'input non è standard e richiede una conoscenza speciale, come il comportamento di input di "vi" su linux.

+0

Ma come si applica ai siti Web e alla vulnerabilità? – predhme

+0

Vedere la risposta di blowdart per una definizione di canonico –

+0

La mia risposta non è affatto in conflitto con la risposta di Blowdarts, tranne che potrei spiegarlo in una frase. Per i programmatori, l'efficienza è la chiave. – djangofan

3

La seguente spiegazione è dal "Application Security e Sviluppo STIG" trovato here:

3,11 rappresentazione canonica problemi rappresentazione canonica sorgono quando il nome di una risorsa viene utilizzato per l'accesso alle risorse controllo. Esistono più metodi per rappresentare i nomi di risorsa su un sistema informatico. Un'applicazione che si basa unicamente su un nome risorsa per controllare l'accesso può erroneamente effettuare una decisione di controllo degli accessi se il nome è specificato in un formato non riconosciuto.

Per esempio, in Windows, Notepad.exe può essere rappresentato dalla seguente file e combinazioni di nomi percorso:

C: \ Windows \ System32 \ notepad.exe

% SystemRoot% \ System32 \ notepad.exe

\ \ C:? \ Windows \ System32 \ Host \ notepad.exe

\ c $ \ Windows \ system32 \ notepad.exe

Un'applicazione che tenta di limitare l'accesso al file basato sul solo file e il nome potrebbe erroneamente concedere o negare l'accesso a .Lo stesso problema può essere applicata ad altre risorse nominate un sistema, come ad esempio un hardware e soft-link, URL, pipe, azione, directory, nome del dispositivo, o entro i dati file, se la codifica si alternano meccanismi sono usato con i dati.

Le seguenti elementi possono indicare potenziali problemi di rappresentazione canonica in un'applicazione :

• controllo accessi decisioni basate su un nome di risorsa.

• Errore di riduzione del nome di una risorsa in modulo canonico prima dell'uso.

Al fine di minimizzare canoniche problemi di rappresentazione nell'applicazione , implementare le seguenti procedure :

• Non fare affidamento esclusivamente sulle nomi delle risorse per controllare l'accesso.

• Se usando nomi di risorse per controllare l'accesso , convalidare i nomi per garantire sono nel formato corretto; respingere tutti i nomi che non soddisfano i criteri noti .

• Utilizzare i meccanismi di controllo degli accessi basati su sistema operativo come le autorizzazioni e gli ACL.

0

Canonicalizzazione significa ridurre i dati ricevuti nella sua forma più semplice, è utilizzato per la convalida dell'input.