Originariamente inviato da eiyen
puoi cambiare la visualizzazione così:
<a href=\"{$directory}{$value}\">{$value}</a> | Elimina
e in elimina.php:
Codice PHP:
$file = $_GET['file'];
unlink($file); // VEDI NOTA!!!!!!!!!!!!!!!!!!!!!!!!
NOTA!!!!!!!!!!!!!!!!!!!!!!!!
dovresti:
- urlencodare il nome del file prima di passarlo come parametro
- NON fare questa cosa!!!!!!!!!! perchè uno può passare qualunque cosa nell'url e - se non hai i permessi ben settati - cancellarti qualunque cosa sul server... sarebbe meglio attribuire dei codici ai file e passare quello come riferimento e non il nome
Soluzione (tenuto conto delle note) corretta, sebbene basti controllare che il file passato in get esista nella directory che vogliamo e fare un poco di pulizia del valore get.
Una prima bozza potrebbe essere così
Codice PHP:
$folder_img = "/percorso/relativo/cartella/da/cui/cancellare/";
$file = parse_clean_value(trim($_GET['file']));
if (file_exists("{$_SERVER['DOCUMENT_ROOT']}{$folder_img}{$file}") {
unlink("{$_SERVER['DOCUMENT_ROOT']}{$folder_img}{$file}");
}
function parse_clean_value($val){
if ($val == ""){
return "";
}
$val = str_replace( " ", " ", $val );
$val = str_replace( chr(0xCA), "", $val );
$val = str_replace( "&" , "&" , $val );
$val = str_replace( "<!--" , "<!--" , $val );
$val = str_replace( "-->" , "-->" , $val );
$val = preg_replace( "/<script/i" , "<script" , $val );
$val = str_replace( ">" , ">" , $val );
$val = str_replace( "<" , "<" , $val );
$val = str_replace( "\"" , """ , $val );
$val = preg_replace( "/\n/" , "
" , $val );
$val = preg_replace( "/\\\$/" , "$" , $val );
$val = preg_replace( "/\r/" , "" , $val );
$val = str_replace( "!" , "!" , $val );
$val = str_replace( "'" , "'" , $val );
$val = stripslashes($val);
$val = preg_replace( "/\\\(?!&#|\?#)/", "\", $val );
return $val;
}