如何在网页上隐藏下载源

时间:2011-02-13 03:49:36

标签: php

我正在寻找隐藏下载源的方法。我很惊讶这不是更多,但它也让我想知道它是否可能。

编辑:隐藏我的意思是让最终用户很难或不可能找到指向该文件的直接链接。因此,他们将被迫实际在页面上,点击它,它起作用。)

我找到了一个强制下载本地存储文件的脚本。我看到它的方式,它隐藏了真正的来源(至少它不在视图源或下载历史记录中)。

http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/

所以这个工作,我把它变成了一个获取linkID的函数,然后用DB检查实际的文件源。万岁!

仅当您的下载位于其他服务器上时才会出现这种情况然后你不能使用这里使用的大多数函数(如filesize,isreadable,fopen,...)。我不够精通,无法决定是否可以跨越服务器进行这项工作。

我意识到可能我的网络服务器会丢失带宽,即使文件没有存储在那里,这也不是什么大问题。

有关此主题的任何信息将不胜感激。我更喜欢PHP,但我可以使用你给我的任何东西,我真的不知道这个。

5 个答案:

答案 0 :(得分:6)

您的意思是要隐藏存储在服务器上的文件的路径?如果是这种情况,只需将文件存储在Web根目录之外,并使用PHP脚本提供文件,该脚本将使用相应标头的readfile()+ header(),具体取决于您是要为打开文件提供服务还是强制下载。有关强制下载脚本的大量示例,请参阅http://php.net/readfile

答案 1 :(得分:2)

抱歉不可能。您必须告诉浏览器资源所在的位置,以便任何savy用户只需解码地址或扫描HTTP请求或其防火墙日志或在浏览器中下载历史记录。

如果您尝试隐藏服务器上的路径,则使用mod_rewrite或别名或其他类似方法重写URL应该足够了。

更新:好的,如果使用自己的带宽不是问题,那么您需要做的就是将文件二进制内容输出到浏览器并设置相关的HTTP标头(即Content-Type和Content-Disposition)。如果文件必须远程存储,那么在输出内容之前,您需要使用CURL或类似程序即时下载和阅读它们。

答案 2 :(得分:0)

如果你的意思是隐藏脚本或文件来自的目录,这是一个简单的答案 - 你不能。

但是,您可以只在您的条款上访问它,例如使用脚本呈现文件(如您所示),但仅在满足特定条件时才能访问。或者,您可以将文件移动到临时/安全目录并允许它们直接访问,但这也意味着等待移动,提供(被认为是)合理和公平的时间下载文件,然后将其删除/删除它完成。

答案 3 :(得分:0)

您可以使用cURL作为内容的pass-thru。这会隐藏实际数据的来源,并允许您以任何方式保护它。它还需要很多带宽,大约是所有下载文件的2倍。

请试一试并告诉我它是否有效?

if ($passesallyoursecurity) {
    set_time_limit(0);
    header("Pragma: public");
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false);
    header("Content-Type: application/download"); 
    header("Content-Disposition: filename=filetheyget.ext");

    $ch = curl_init("http://remotedomain.com/dir/file.ext");
    curl_exec($ch);
    curl_close($ch);        
    exit();
}

答案 4 :(得分:-1)

我建议您使用不带任何HTML的die()消息。在文件中。

然后,插入您希望网页拒绝的IP地址。我会在数组()中打破你不喜欢的IP地址。然后使用“if”构造来查看是否有任何IP地址潜伏。

$decline_ips = array('ip_1' => '127.0.0.1');
if ($_SERVER['REMOTE_ADDR'] == $decline_ips['ip_1']) {
   die("You aren't permitted direct access to this page.\n\n\n\n
   Sources are blank.");
}

它就像一个魅力!对于XTRA-XTRA安全性,我建议将不允许的IP地址(当他们访问时)插入数据库,这样无论何时再次尝试,都会覆盖源和整个文档。

但是,您可以使用我在文档的其他部分发布的脚本。