2016-02-18 118 views
1

当用户想从我的网站下载文件,用户必须点击如下图所示如何隐藏用户使用php的下载文件路径?

https://www.example.com/download.php?aaa=111&bbb=222

的download.php

<?PHP 
session_start(); 
include("connect.php"); 
$aaa = mysql_real_escape_string($_GET[aaa]); 
$bbb = mysql_real_escape_string($_GET[bbb]); 
if(($aaa = '111')&($bbb = '222')) // this line is example for ask stackoverflow // 
{ 
    $filePath_try_to_download = 'attachments_files/test.pdf'; 
    if(file_exists($filePath_try_to_download)) 
    { 
     $fileSize = filesize($filePath_try_to_download); 
     $fileName = "test.pdf";  
     header("Cache-Control: private"); 
     header("Content-Type: application/stream"); 
     header("Content-Length: ".$fileSize); 
     header("Content-Disposition: attachment; filename=".$fileName); 
     // Output file. 
     readfile ($filePath_try_to_download);     
     exit(); 
    } 
} 
?> 

我想知道从这个链接,当用户下载文件的链接https://www.example.com/download.php?aaa=111&bbb=222用户可以在服务器上获取我的文件路径(attachments_files/test.pdf)。如果用户可以得到我的文件路径,我怎么能隐藏它? (file in this dir is very importance

+0

你使用什么服务器? Apache的?你不能用PHP来做你想做的事情,因为PHP只运行脚本 - 它不处理路由。 **还请注意,通过模糊处理的安全性根本就没有安全性。** –

+0

@Matthew php可以轻松处理这个,而且没有任何模糊处理 –

+0

@Hannky Panky-- pdf是示例 –

回答

2

由于我是从我的手机发表评论,他们无法真正解释太多,所以这里就是你的答案。

我想从这个链接知道什么时候用户下载文件https://www.example.com/download.php?aaa=111&bbb=222用户可以得到服务器或没有(attachments_files /检验.pdf),我的文件路径。

没有,用户无法看到您正在通过readfile()读取文件路径。他们根本无法找到该文件的位置。

如果你想消除人们猜测文件路径的任何机会,只需将这些文件放在你的web根文件夹之外,然后从那里获取它们。

$filePath_try_to_download = 'attachments_files/test.pdf'; 

这条道路是只知道你的PHP代码,这是对用户不可见,因此,他们没有从哪儿读他们下载文件的想法,只是消除了猜测的机会虽然:)

而且很明显你必须确保访问这个URL https://www.example.com/download.php?aaa=111&bbb=222否则有什么意义!

+0

我的代码最好,而不是编辑任何内容? –

+0

啊,我现在明白了。是的,我认为OP在问一些不同的东西。 –

+0

是的,没有必要改变你的代码中的任何东西,除非你的文件移出web根目录,因为你说的目录是非常重要的 –

0

否。用户无法获取文件路径。他只获得由PHP脚本输出的内容。

你可以做到这一点,用户只能得到“你好”字符串。因此,您的PHP脚本的角色决定了用户可以获得哪些内容。

<?php 
    echo "Hello"; 
?>