如何避免PHP中的UNLINK安全风险?

Ada*_*dam 6 php security ajax unlink delete-file

我正在使用UNLINK PHPAJAX.我知道这种方式非常危险,因为每个人都可以删除任何文件.但我需要使用,AJAX因为我删除文件时无法重新加载页面.

那么我该如何才能允许仅为拥有它的用户删除该文件?

如果你认为我在这里做错了什么或其他什么你想到的东西,你也要告诉我其他的事情,你认为它会有用:)

我的PHP代码:


<?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);
    }


 ?>
Run Code Online (Sandbox Code Playgroud)

我的AJAX代码:


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();
    }
Run Code Online (Sandbox Code Playgroud)

Wad*_* M. 8

您需要以某种方式验证用户.

您的用户需要使用用户名和密码进行身份验证.

PHP会话可用于记住,您应该使用服务器上的数据库表或文本文件来存储文件所有权信息.

然后,在取消链接任何内容之前,您的逻辑应该确保当前"已验证"的用户是该文件的所有者.