2011-02-10 16 views
9

Sto cercando un modo per eliminare un file dal server utilizzando PHP. Fondamentalmente ho i miei file elencati in una pagina in questo modo:Eliminazione di un file server

<ul> 
    <li><a href="delete_file.php?file=uploads/file_01.jpg">Delete File 01</a></li> 
    <li><a href="delete_file.php?file=uploads/file_02.jpg">Delete File 02</a></li> 
    <li><a href="delete_file.php?file=uploads/file_03.jpg">Delete File 03</a></li> 
</ul> 

Il problema è che non sono sicuro di come ottenere il mio file delete_file.php al lavoro. Credo che ha bisogno di essere qualcosa di simile:

<?php 
    $path="uploads/file_01.jpg"; 
    if(unlink($path)) echo "File Deleted"; 
?> 

... ma non sono sicuro di come ottenere il percorso $ per passare il file che avevo cliccato da eliminare.

+0

desideri $ _GET [ 'file'], e questo è folle dato che potrei aggiungere un file all'URL e cancellarlo. –

+11

Cosa succede se qualcuno passa 'delete_file.php? File = delete_file.php'? – zerkms

risposta

16

mentre devi essere incredibilmente attento a dare a un utente la possibilità di cancellare i file, ti darò abbastanza corda per impiccarti

definire una directory di base che conterrà tutti i file che saranno cancellati

$base_directory = '/home/myuser/'; 

quindi eliminare il file

if(unlink($base_directory.$_GET['file'])) 
    echo "File Deleted."; 
+1

Potrebbe essere una buona idea disabilitare anche l'attraversamento di directory. – drudge

+0

Grazie per quello. Ha funzionato a meraviglia. Vuoi dire non consentire la navigazione nella directory? – PHPnoob

+0

cosa succede se qualcuno passa questo URL: '/delete_file.php?file = ../../etc/passwd' – drudge

2
<?php 
    $file_to_delete = $_GET['file']; 
    if (is_file($file_to_delete)){ 
    echo (unlink($file_to_delete) ? "File Deleted" : "Problem deleting file"; 

    } 
?> 

Non ho intenzione di mentire, non sanno un modo migliore per disinfettare il [ 'file'] $ _GET diverso da verificare se si tratta di un file. Se questo non è un modo valido, gli esperti si inseriscono per favore. (Forse seguire le linee guida present in this SO topic?)

+0

la quantità di sterilizzazione che dovresti fare per proteggerti sarebbe ridicola con questa funzionalità data a qualsiasi utente finale. Quindi lo lascio all'OP :-) – Patrick

+3

Puliscilo con ['basename()'] (http://php.net/basename) per impedire alla persona di inserire qualcosa come '../../someotherfile '. – Jonah

+0

un altro piccolo prbolem, hai dimenticato ')' prima di ';' sulla riga dov'è 'echo', ma tutto il resto va bene –

Problemi correlati