一尘不染

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

ajax

我将UNLINK与PHP和一起使用AJAX。我知道这种方式非常危险,因为每个人都可以删除任何文件。但是我需要使用,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);
    }


 ?>

我的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();
    }

阅读 281

收藏
2020-07-26

共1个答案

一尘不染

您需要以某种方式对用户进行身份验证。

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

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

然后,在取消任何链接之前,您的逻辑应确保当前“经过身份验证”的用户是文件的所有者。

2020-07-26