2011-02-10 12 views
9

PHP kullanarak sunucudan bir dosyayı silmek için bir yol arıyorum silme. Temelde benim dosyalar bu şekilde bir sayfada listelenen vardır:bir sunucu dosyası

<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> 

sorun benim delete_file.php dosyası çalışmaya nasıl emin değilim. Ben böyle bir şey olması gerekiyor inanıyoruz:

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

... ama $ yolu silmeyi tıklamış dosyaya değiştirmek nasıl emin değilim. Yalan gitmiyorum

+0

$ _GET istediğiniz silmek silinecektir tüm dosyaları içerecek bir temel dizini tanımlar [ 'file'], ve bu url için bir dosya ekleyebileceğimi ve onu sildiğimden delice. –

+11

Birisi silinsin mi? Delete_file.php? File = delete_file.php'? Kendinizi herhangi bir son kullanıcıya verilen bu işlevselliği ile saçma olurdu korumak için yapmak zorunda olacağını sanitasyon – zerkms

cevap

16

bir kullanıcıya dosyaları silmek için yeteneği vererek inanılmaz dikkatli olmak zorunda iken. uymak lütfen Sana yeterince ip vereceğiz kendini asmaya

$base_directory = '/home/myuser/'; 

Ardından dosyayı

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

da dizin geçişini izin vermemek için iyi bir fikir olabilir gayet hatta. – drudge

+0

Bunun için teşekkürler. Bir tedavi yaptı. Dizine göz atmayı kastediyor musun? birileri bu URL geçiren – PHPnoob

+0

ne olur: '/delete_file.php?file = ../../etc/hayır, jnpcl birisi' file = ../../vs yayınlamak için izin demektir 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"; 

    } 
?> 

, bir dosya olup olmadığını kontrol dışındaki [ 'dosyasını'] $ _GET sterilize için daha iyi bir yol bilmiyorum. Bunun geçerli bir yol değilse, uzmanlar, (Belki Rehberin present in this SO topic izleyin?)

+0

miktarı. Yani '../../someotherfile gibi bir şey girmesini kişiyi tutmak için [basename()' '] (http://php.net/basename) ile temizleyin – Patrick

+3

:-) OP onu o bırakacağım '. – Jonah

+0

başka bir küçük prbolem, siz) 'unuttum' önce ';' 'echo' olduğunu, ancak diğer her şey –

İlgili konular