Php 如何在网页上隐藏下载源

Php 如何在网页上隐藏下载源,php,Php,我正在寻找一种方法来隐藏我下载的源代码。我很惊讶没有更多的报道,但这也让我怀疑这是否可能 (编辑:通过隐藏,我的意思是使最终用户很难或不可能找到指向该文件的直接链接。因此,他们将被迫实际在页面上单击该文件,以使其工作。) 我找到了一个脚本来强制下载本地存储的文件。在我看来,它隐藏了真正的源代码(至少它不在查看源代码或下载历史记录中) 因此,这是可行的,我将它制作成一个获取linkID的函数,并使用DB检查实际的文件源。万岁 只有当您的下载在另一台服务器上时才会发生什么?那么您就不能使用这里使用

我正在寻找一种方法来隐藏我下载的源代码。我很惊讶没有更多的报道,但这也让我怀疑这是否可能

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

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

因此,这是可行的,我将它制作成一个获取linkID的函数,并使用DB检查实际的文件源。万岁

只有当您的下载在另一台服务器上时才会发生什么?那么您就不能使用这里使用的大多数函数(比如filesize、isreadable、fopen等等)。我不够精通,无法决定跨服务器进行此工作是否可行

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


如能提供有关该主题的任何信息,将不胜感激。我更喜欢PHP,但我可以使用你给我的任何东西,我真的不知道这一点。

对不起,不可能。您必须告诉浏览器资源的位置,以便任何精明的用户都可以简单地解码地址或扫描HTTP请求或其防火墙日志,或在浏览器中下载历史记录

如果您试图隐藏服务器上的路径,那么使用mod_rewrite或别名或其他类似方法重写URL就足够了


更新:确定如果使用自己的带宽不是问题,那么您需要做的就是将文件二进制内容输出到浏览器并设置相关的HTTP头(即,内容类型和内容配置)。如果文件必须远程存储,则在输出内容之前,您需要脚本使用CURL或类似工具下载并动态读取这些文件。

您的意思是要隐藏存储在服务器上的文件路径?如果是这种情况,只需将文件存储在web根目录之外,并使用PHP脚本提供文件,该脚本将根据您提供的文件是用于打开还是强制下载,使用适当标题的readfile()+header()。有关强制下载脚本的大量示例,请参阅。

如果您的意思是隐藏脚本或文件来自的目录,那么这是一个简单的答案——您不能


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

您可以使用cURL作为内容的传递。这将隐藏实际数据的来源,并允许您选择任何方式来保护它。它还需要大量带宽,大约是所有下载文件大小的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();
}

我建议您使用不带任何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地址(当他们访问时),这样每当他们重试时,都会覆盖源代码和整个文档


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

我不太理解“隐藏源代码”。我的理解是,他想将用户链接到远程下载,但隐藏远程位置,同时不提供对其他人有用的链接。是的,但正如我提到的,源文件位于不同的服务器上,readfile不接受。实际上是的,它接受(假设您启用了allow\u url\u fopen)。这确实意味着它将被临时下载到您的文件系统中,所以我猜从技术上讲,您仍然在本地为它提供服务?有文件的还是为客户服务的?(请原谅我的无知)为客户端提供服务的服务器。另一方面,如果要将远程url传递给readfile,则需要确保url以开头http://It这并不是“至关重要”,我只是想让它尽可能的难。我链接的脚本在我的Chrome下载历史记录中留下了一个指向.php文件的链接。php脚本使用facebook信息来确定源,因此该链接对其他人来说是无用的。如果他们只能通过防火墙日志确定源代码,那没关系。听起来你真的应该提供一个临时文件,在下载完成后删除它(或者每天或每小时轮换文件名)。即使内容位于不同的服务器上,也可以通过FTP远程执行。您还可以动态添加删除防火墙IP条目,并添加正确访问脚本的用户的IP。我看不出与John的答案有任何关联。你能解释一下什么是不正确的吗?你是说你无法控制远程服务器吗?如果是这样的话,除非你保留文件的本地副本(并因此使用你自己的带宽),否则你基本上是疯了。脚本服务于内容(因此脚本就是内容)。您只能通过从服务器提供内容来屏蔽这种方式。我的“不正确”是指“对不起,不可能”@John的回答允许通过PHP脚本动态路由文件,隐藏文件的实际位置因为这样你就不能再