Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中安全地解除文件链接?_Php_Security_Unlink - Fatal编程技术网

如何在php中安全地解除文件链接?

如何在php中安全地解除文件链接?,php,security,unlink,Php,Security,Unlink,我需要用php中的unlink()函数删除我的/var/www/mysite/postmage文件夹中的图像文件。 但我绝对担心如果有人侵入我的网站并使用它。。或在路径中,尝试删除上层文件夹中的内容。 我使用JQuery发送路径,因为这是客户端编程,所以很危险。 我知道,我可以在上传文件时绕过点,但如果有人通过在客户端添加点来更改路径,该怎么办? 我的问题是如何防止有人这样做?经验法则应该是,您应该至少依赖客户端的数据 现在根据您的问题,您似乎正在发送要删除的完整文件路径 // example

我需要用php中的
unlink()
函数删除我的
/var/www/mysite/postmage
文件夹中的图像文件。 但我绝对担心如果有人侵入我的网站并使用它。。或在路径中,尝试删除上层文件夹中的内容。 我使用JQuery发送路径,因为这是客户端编程,所以很危险。 我知道,我可以在上传文件时绕过点,但如果有人通过在客户端添加点来更改路径,该怎么办? 我的问题是如何防止有人这样做?

经验法则应该是,您应该至少依赖客户端的数据

现在根据您的问题,您似乎正在发送要删除的完整文件路径

// example
$filename = $_POST['fname']; // something like xyz.png
$filename = str_replace('/','',$filename); // strip any forward slash.

if(empty($filename)){
die('File Name Invalid'); // seems like all the characters in file name were slashes.
}

$directory = 'some/folder/that/contain/images/postImage/';
$filepath = $directory . $filename;
unlink($filepath);
因此,IMHO,您应该只发送文件名,让服务器端
php
决定(追加)要删除文件的目录

// example
$filename = $_POST['fname']; // something like xyz.png
$filename = str_replace('/','',$filename); // strip any forward slash.

if(empty($filename)){
die('File Name Invalid'); // seems like all the characters in file name were slashes.
}

$directory = 'some/folder/that/contain/images/postImage/';
$filepath = $directory . $filename;
unlink($filepath);
现在关于其他人使用此功能,只需保留一个登录系统,并检查用户是否已登录

  • 确保apache用户具有适当的权限(仅在网站目录中写入)
  • 从路径中剪切
    ,如果路径正确,则清理并验证路径
  • 您还可以使用realpath()函数

  • 这在Windows系统上失败,因为
    \
    是目录分隔符。当然,这只是一个概念证明,旨在给出一个粗略的想法,人们可以随时即兴使用
    stripslashes()
    目录分隔符
    等。因为OP没有发布任何代码,所以我只留下我的示例,谢谢你指出。Windows允许
    \
    /
    作为目录分隔符。单独使用
    目录\u分隔符
    不能解决这个问题。我的意思是如果代码添加了
    $filename=stripslashes($filename)在第4行,这不就足够了吗?一个
    basename
    也足够了。相关问题: