Eliminazione di un file server

Sto cercando un modo per eliminare un file dal server tramite PHP. Fondamentalmente ho il mio file elencati in una pagina in questo modo:

<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 io non sono sicuro di come ottenere il mio delete_file.php file di lavoro. Credo che debba essere qualcosa di simile a questo:

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

…ma io non sono sicuro di come ottenere il $path per modificare il file che avevo cliccato su elimina.

  • volete $_GET[‘file’], e questo è folle, come ho potuto aggiungere un file all’url ande eliminarlo.
  • Che cosa succede se qualcuno passa delete_file.php?file=delete_file.php?
InformationsquelleAutor | 2011-02-10

 

3 Replies
  1. 25

    mentre è necessario essere molto attenti con offrendo all’utente la possibilità di eliminare i file, ti do abbastanza corda per impiccarti

    definire una directory di base che conterrà tutti i file che verranno eliminati

    $base_directory = '/home/myuser/';

    Quindi eliminare il file

    if(unlink($base_directory.$_GET['file']))
        echo "File Deleted.";
    • Potrebbe essere una buona idea per impedire l’attraversamento di directory, troppo.
    • Grazie per questo. Lavorato trattamento. Significa non consentire l’esplorazione delle directory?
    • che cosa succede se qualcuno passa questo URL: /delete_file.php?file=../../etc/passwd
    • no, jnpcl significa non permettere a qualcuno di post file=../../etc/apache2/apach2.conf che, dato il diritto di autorizzazioni, eliminare il file di configurazione per il server web del server
    • gotcha. Non dovrebbe essere un problema, in quanto lo script non può essere eseguita, a meno che non sei loggato come amministratore (me).
  2. 5
    <?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 conosco un modo migliore per igienizzare il $_GET[‘file’] altro che controllare se è un file. Se questo non è un metodo valido, gli esperti si prega di carillon. (Forse seguire le linee guida presente in questo argomento COSÌ?)

    • la quantità di sanificazione che si dovrebbe fare per proteggere se stessi sarebbe ridicolo con questa funzionalità è dato a qualsiasi utente finale. Così lascio che l’OP 🙂
    • Pulire con basename() per mantenere la persona di entrare in qualcosa di simile a ../../someotherfile.
    • un altro piccolo prbolem, hai dimenticato ) prima della ; on line dove è echo, ma tutto ciò è bene
  3. 0

    A volte si desidera creare il percorso in modo dinamico.

    Per esempio, sto usando un CMS in luoghi diversi, quindi non dovrei usare il fisso definizioni.

    Mio progetto di struttura:

    -progetto

    |-admin

    |–app

    |—controller

    |-caricare

    $base_directory = dirname(__FILE__);
    echo $base_directory; //'/home/myProject/public_html/admin/app/controlers/'

    Questa è la strada per l’esecuzione di file php.

    Mio file php in 'admin/app/controllers/'

    Ma l’upload di file in 'upload/'

    Abbiamo bisogno di eliminare cartelle non necessarie per il corretto percorso. Il file nella cartella di caricamento quindi non hanno bisogno di ” admin/app/controllers/’ è inutile. Così siamo rimozione di questa parte.

    $path = str_replace('admin/app/controllers/', '', $path);
    echo $path;  //'/home/myProject/public_html/upload/myFile'

    Ora abbiamo percorso corretto e siamo in grado di eliminare il file.

    if (file_exists($path)){
        if(unlink($path)){
           echo "File deleted";
        }
    }else{
         echo "File is not exists";
    }

Lascia un commento