È qualcosa di sfruttabile in questo codice?

-4

C'è qualche possibilità di superare questo confronto debole? L'utente può inserire un file con un'estensione non contenuta in $ consentita e superare il controllo di sicurezza?

$allowed = array('txt','docx');
if (isset($_REQUEST['file'])) {
    $file = $_REQUEST['file'];
    if (preg_match('#\.(.+)$#', $file, $matched) && isset($matched[1]) && !in_array($matched[1], $allowed)) 
        echo 'You can not pass beacause extension is bad';   
    }
}

Se il codice precedente restituisce che è l'estensione corretta. C'è la prossima convalida:

if (strrpos($file, '.') !== false)
    $ext = substr($file, strrpos($file, '.'));
else
    $ext = '';

Mi chiedevo se potevo inserire qualcosa che aggirasse tutto il controllo e nella variabile $ ext = ''; Ho qualcosa come 'jpg' o 'bmp' che cosa è fuori dalla tabella consentita. È un esempio di strana verifica che ho trovato sul server alla penetrazione.

    
posta sebastianpszczolka 22.01.2016 - 11:33
fonte

2 risposte

0

Tecnicamente ..

No, il codice fornito per filtrare una determinata estensione funziona correttamente e non dovrebbe esserci un modo per ingannarlo. Tuttavia, dovresti abilitare strict - flag .

Poi di nuovo ...

I formati di file che hai fornito non devono essere sicuri. DOCX: i file possono incorporare macro dannose.

Il tuo codice può essere migliorato però. Il tuo regex prende troppo presto quando ha più estensioni, la condizione if approva uno script se non ha alcuna estensione, alcune parti sono necessarie e sembra mancante per cancellare lo script dopo aver visualizzato l'errore. Vedi le mie modifiche di seguito.

$allowed = array('txt','docx');
if (isset($_REQUEST['file'])) {
    $file = $_REQUEST['file'];
    $match = preg_match('#\.(\w+)$#', $file, $matched);
    if (!$match || ($match && !in_array($matched[1], $allowed, true))) 
        echo 'Invalid file extension';
        return; // Stop script right here
    }
}
    
risposta data 22.01.2016 - 12:00
fonte
0

Ricorda che le estensioni dei file non valgono davvero la pena. Le GUI desktop possono utilizzare le estensioni come suggerimento su come aprire o visualizzare i file in base alle loro estensioni (e poi ancora non a causa di un'azione ridefinita dall'utente su qualsiasi estensione specifica) ma il sistema operativo non lo fa t prendere nota dell'estensione quando si elabora il tipo di contenuto di un file.

Diversi sistemi operativi lo trattano in modo leggermente diverso, ma di solito sono le autorizzazioni di un file che lo rendono pericoloso non l'estensione. Molti compilatori e interpreti, ad esempio, non si preoccupano delle estensioni, né di varie shell ecc. Che tenteranno di eseguire una chiamata di file 'fred.gif' abbastanza felicemente se tu o un programma lo dite perché le autorizzazioni sono corrette .

Diversi sistemi operativi e servizi trattano le estensioni in modo diverso in questo modo, ma attenzione.

    
risposta data 22.01.2016 - 14:16
fonte

Leggi altre domande sui tag