Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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
使用joomla(甚至只是PHP),如何混淆PDF文件名?_Php_Joomla - Fatal编程技术网

使用joomla(甚至只是PHP),如何混淆PDF文件名?

使用joomla(甚至只是PHP),如何混淆PDF文件名?,php,joomla,Php,Joomla,我有一个文件,叫做secret.pdf,可以下载。但是,我想防止它有一个可以复制/粘贴或打印出来的URL,比如www.website.com/pdf/secret.pdf禁止搜索文件 例如,用户A单击链接,并获取kgsjgldsg.pdf。用户B单击相同的链接,但获得asadsfsefaw.pdf。关键是,随机文件名用于引用同一个文件secret.pdf Ive在谷歌上搜索了php文件模糊处理程序和joomla文件模糊处理程序,但运气不佳。任何正确方向的想法或指针都将不胜感激。您可以添加一个基于

我有一个文件,叫做secret.pdf,可以下载。但是,我想防止它有一个可以复制/粘贴或打印出来的URL,比如www.website.com/pdf/secret.pdf禁止搜索文件

例如,用户A单击链接,并获取kgsjgldsg.pdf。用户B单击相同的链接,但获得asadsfsefaw.pdf。关键是,随机文件名用于引用同一个文件secret.pdf

Ive在谷歌上搜索了php文件模糊处理程序和joomla文件模糊处理程序,但运气不佳。任何正确方向的想法或指针都将不胜感激。

您可以添加一个基于时间的GET变量,有效期为1分钟就足够了

所以您的请求应该是/pdf/getPDF.php?key=xxxxxxxxx

根据服务器上的当前时间,将key设置为salted hash,例如,当17:17时,最接近的数字可以除以5,您将使用17:15,等等

然后在getPDF.php文件上生成“当前”散列,如果是相同的,则对pdf进行流式处理

这不会阻止人们使用该链接,但该链接仅在5分钟内有效

附录:您应该确保无法从外部访问pdf,但只能读取pdf流式php文件,例如,在/var/www或等效目录之外

您可以根据时间添加一个GET变量,有效时间为1分钟就足够了

所以您的请求应该是/pdf/getPDF.php?key=xxxxxxxxx

根据服务器上的当前时间,将key设置为salted hash,例如,当17:17时,最接近的数字可以除以5,您将使用17:15,等等

然后在getPDF.php文件上生成“当前”散列,如果是相同的,则对pdf进行流式处理

这不会阻止人们使用该链接,但该链接仅在5分钟内有效


附录:您应该确保pdf不能从外部访问,但只能读取您的pdf流式php文件,例如在/var/www或等效目录之外

另一种方法是将pdf文件从您的托管帐户的公共html web文件夹中存储1级。然后,您可以使用完整路径将文件作为下载交付给用户。这样,没有人可以访问该文件,因为它在您的网站上不可用。只有站点上的代码知道文件的位置。我对许多组件执行此操作,请参见下面与Joomla相关的代码:

    $file = '/home/domain/files/secret.pdf'
    $filesize = filesize(file );
    JResponse::setHeader('Content-Type', 'application/pdf');
    JResponse::setHeader('Content-Transfer-Encoding', 'Binary');
    JResponse::setHeader('Content-Disposition', 'attachment; filename="'.$file.'"');
    JResponse::setHeader('Content-Length', $filesize);
    echo JFile::read($file);

另一种方法是将您的公共html web文件夹中的pdf文件存储在托管帐户上。然后,您可以使用完整路径将文件作为下载交付给用户。这样,没有人可以访问该文件,因为它在您的网站上不可用。只有站点上的代码知道文件的位置。我对许多组件执行此操作,请参见下面与Joomla相关的代码:

    $file = '/home/domain/files/secret.pdf'
    $filesize = filesize(file );
    JResponse::setHeader('Content-Type', 'application/pdf');
    JResponse::setHeader('Content-Transfer-Encoding', 'Binary');
    JResponse::setHeader('Content-Disposition', 'attachment; filename="'.$file.'"');
    JResponse::setHeader('Content-Length', $filesize);
    echo JFile::read($file);

还有一扇窗户开着。更好的方法是在数据库中记录生成的键值,并在调用下载脚本时使该键值无效/删除。这样就可以让它尽可能长时间地打开,并且在下载开始时自动关闭。完全同意,但我不知道让窗口保持打开状态是否有那么大的问题。这不是一个安全问题,因为pdf无论如何都可以共享:我认为你在这里不是在与一个真正的问题作斗争,但理论上你是对的:Dyeah,我保证会有一个用户多次单击它,第二次当它抛出“未找到文件”时,他们会被击中。我想这次最好留个小窗户。不过,很高兴知道这是一个选项。当前哈希?如果getPDF链接是在17:19:59生成的呢?要解决这个问题,您需要检查getPDF.php中的最后2个哈希值,例如,如果当前时间是17:21,则为17:20和17:15。从技术角度讲,这是一个次要问题,但很重要!但是你应该能够解决这个问题。尽管如此,你还是指出了这一点:仍然敞开着一扇窗户。更好的方法是在数据库中记录生成的键值,并在调用下载脚本时使该键值无效/删除。这样就可以让它尽可能长时间地打开,并且在下载开始时自动关闭。完全同意,但我不知道让窗口保持打开状态是否有那么大的问题。这不是一个安全问题,因为pdf无论如何都可以共享:我认为你在这里不是在与一个真正的问题作斗争,但理论上你是对的:Dyeah,我保证会有一个用户多次单击它,第二次当它抛出“未找到文件”时,他们会被击中。我想这次最好留个小窗户。不过,很高兴知道这是一个选项。当前哈希?如果getPDF链接是在17:19:59生成的呢?要解决这个问题,您需要检查getPDF.php中的最后2个哈希值,例如,如果当前时间是17:21,则为17:20和17:15。从技术角度讲,这是一个次要问题,但很重要!但是你应该能够解决这个问题。尽管如此,你说的很好 他说: