Frage

Ich verwende UNLINK mit PHP und AJAX. Ich weiß, dass auf diese Weise sehr gefährlich, weil jeder beliebige Dateien löschen. Aber ich brauche AJAX zu verwenden, weil ich die Seite nicht neu laden kann, wenn ich die Dateien löschen.

Wie soll ich damit tun, um die Datei für den Benutzer nur löschen, den es besitzt?

Bitte lassen Sie mich andere Dinge zu wissen, wenn Sie denken, ich mache hier etwas falsch oder etwas anderes, was Sie im Kopf haben und Sie denken, dass es nützlich sein wird:)

Mein PHP-Code:


<?php

    $photo_id       = $_GET['photo_id'];
    $thumbnail_id   = $_GET['thumbnail_id'];    

    function deletePhotos($id){
        return unlink($id);
    }

    if(isset($photo_id)){
        deletePhotos($photo_id);
    }
    if(isset($thumbnail_id)){
        deletePhotos($thumbnail_id);
    }


 ?>

Mein AJAX-Code:


function deletePhoto(photo, thumbnail){

        var photos = encodeURIComponent(photo);
        var thumbnails = encodeURIComponent(thumbnail);

        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        } else {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                document.getElementById("media").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "http://192.168.2.104/images/users/delete_photo.php?photo_id="+photos+"&thumbnail_id="+thumbnails, true);
        xmlhttp.send();
    }
War es hilfreich?

Lösung

Sie müssen irgendwie den Benutzer authentifizieren.

Ihre Bedürfnisse der Nutzer mit einem Benutzernamen und einem Passwort authentifiziert werden.

PHP-Session verwendet werden kann, sich daran zu erinnern, und Sie sollen eine Datenbanktabelle oder eine Textdatei auf dem Server zu speichern Datei Eigentümerinformationen verwenden.

Dann, bevor Entkettung etwas, Ihre Logik sollte sicherstellen, dass die zur Zeit „authentifizierte“ Benutzer ist der Besitzer der Datei.

Andere Tipps

Sie können Ihre Aufgabe vereinfachen, indem eine sehr einfache Datenbank Substitution mit - einer Verzeichnisstruktur. halte Benutzer-Dateien in Benutzer-Verzeichnis. so können Sie immer überprüfen, ob bestimmte Benutzerrechte haben zu löschen. Nennen Sie ein Verzeichnis nach Benutzernamen, oder - viel besser - numerische Benutzer-ID

nur so etwas wie

$photo_id = basename($_GET['photo_id'];)
$filename = $filebase.$_SESSION['user_id']."/".$photo_id;
if (file_exists($filename) unlink ($filename);

Begrenzen Sie die Entkettung in das Verzeichnis mit den Fotos. Das heißt, nicht erlaubt .. im Weg, oder überprüfen Sie den vollständigen Pfad nach realpath tun (). Andernfalls kann der Benutzer delete_photo.php?photo_id=../../../../etc/passwd anfordern und das System brechen.

In Ihrer PHP:

  • Stellen Sie sicher, $ _GET [ 'photo_id'] und $ _GET [ 'thumbnail_id'] enthalten keine“../"
  • Stellen Sie außerdem sicher voranstellen Sie eine basepath auf die ID.

Ansonsten kann der Benutzer eine beliebige Datei löschen.

Wie für den Besitz haben Sie die Informationen zu speichern, die auf der Serverseite besitzt die Datei irgendwo (zB eine MySql-DB). Dann sollten Sie diesen Ort konsultieren, bevor Sie die Datei zu löschen.

Wie Wadih M. gesagt hat. Sie benötigen Benutzer zu authentifizieren. Dann können Sie verwenden, den „Besitzer des Bildes“ auf die „User zur Zeit anmelden“ zu vergleichen. Dies wird Ihnen alle Sicherheit, die Sie möchten.

Wie ich schon sagte, nennen die varaibles, so dass sie richtig klingen. Als ich „id“ in einem varaiable sehen. Ich automatisch als Programmierer davon ausgehen, dass es sich um eine numerische var.

haben das gleiche Problem hatte und sich um ihn herum PHP ftp_delete Funktion mit

Ein anderer Vorschlag: nicht speichert Dateien auf der Festplatte, sondern sie in einer Datenbank setzen. Dies hält eine sehr klare Unterscheidung zwischen Ihrer Website + Skripte und „Benutzerdaten“.

(jemand mir einmal gesagt, dass Dateien Dateien waren, und Datenbanken waren für Daten, und die sind anders, aber wie ich es sehe, Dateien enthalten die Daten sowieso. Mysql hat eine perfekte LONGBLOB Art in etwas zu setzen, und Sie können speichern Meta-Daten wie Dateityp und die Dateinamen, in getrennten Feldern in der gleichen Datenreihe, die Dinge sauber und einfach)

hält
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top