php – 保护PDF文档不被URL直接访问

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 保护PDF文档不被URL直接访问脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想保护pDF文件不被直接链接,而是让我登录用户能够访问它.我有一个链接,目前转到一个 javascript函数发布一个表单:
     $( ‘nameofdoc’)的setPRoPErty( ‘价值’,DOC).
     .的document.getElementById( ‘sendme’)提交();

其中sendme是表单的名称,name的名称是我想要显示的文档的索引.

然后转到PHP文件

$docpath = $holdingArray[0].$holdingArray[1];

 $file = $holdingArray[0]; //file name
 $filename = $holdingArray[1]; //path to the file]
 header( 'Location:'.$docpath ) ;
 header('Content-type: application/pdf');
 header('Content-DisposITion: attachment; filename="'.$filename  . '"');
 readfile($filename)

这一切都很好,它加载文件输出pdf.我不能做的是保护目录免受直接链接 – 即www.mydomain.COM/pathToPdf/pdfname.pdf

我曾经想过使用.htaccess来保护目录,但是它在共享主机上,所以我不确定安全性,无论如何,当我尝试时,我无法让它工作.

任何帮助都会很棒,因为这是我尝试解决这个问题的第四天.

谢谢

更新

我有很多帮助,谢谢你,但我还没到那里.

我有一个.htaccess文件,当从目录请求pdf时,它现在启动另一个PHP文件

RewriteEngine on
 rewriterule ^(.*).(pdf)$fileopen.PHP

当fileopen.PHP文件启动时,无法打开pdf

$path = $_SERVER['REQUEST_URI'];
 $paths = explode('/',$path);
 $lastIndex = count($paths) - 1;
 $fileName = $paths[$lastIndex]; 

 $file = basename($path);

 $filepath = $path;

 if (file_exists($file)) {
     header( 'Location: http://www.mydomain.com'.$path ) ;
     header("Content-type: application/pdf");
     header("Content-Disposition: attachment; filename=".$file);
     readfile($filepath);

 }else{
     echo "file not found using path ".$path." and file is ".$file;
 }

输出
使用路径/@R_126_349@/6/Doc1.pdf找不到文件,文件是Doc1.pdf

但该文件确实存在,并在那个direcotry – 任何想法?

好的,我很高兴地报道Jaroslav真的帮助我解决了这个问题.他的方法运行良好,但是将所有目录内容排成一行很棘手.最后,我花了几个小时玩组合来使它工作,但他给出的原则很好.谢谢

解决方法

正如您所提到的,最好的方法是使用htaccess保护该文件夹.所以你将所有PDF放在Pdf /文件夹中,并在同一个pdf文件夹中输出.htaccess文件

RewriteEngine on
RewriteRule .* your-PHP-script.PHP

现在,此文件夹中的url无法访问任何文件.对此文件夹中每个文件的每个请求都将返回your-PHP-script.PHP脚本返回的内容.在你的PHP-script.PHP中,你可以这样做:

//Check if user has right to access the file. If no,show access denied and exit the script.
$path = $_SERVER['REQUEST_URI'];
$paths = explode('/',path);
$lastIndex = count($paths) - 1;
$fileName = $paths[$lastIndex]; // Maybe add some code to detect subfolder if you have them
// Check if that file exists,if no show some error message
// Output headers here
readfile($filename);

现在,如果用户打开domain.com/pdf/nsa-secrets.pdf,apache将运行你的-PHP-script.PHP.脚本将变量$_SERVER [‘REQUEST_URI’]设置为“domain.com/pdf/nsa-secrets.pdf”.你取最后一部分(文件名)并将其输出用户(或不是).

这将阻止任何人通过知道URL直接从互联网访问文件.如果有人可以直接访问您服务器上的文件,那么这不会阻止他们.另一方面,我认为任何共享主机都会阻止用户获取其他客户端的文件.唯一的方法是以某种方式破解服务器.但后来我们变得非常偏执,如果这可能是你的情况,你不应该首先使用共享主机.

如果你不能使htaccess工作,你可以尝试模糊文件,因此很难为外面的人发现它们.例如,将文件从mySecretData.pdf更改为djjsdmdkjeksm.pdf.这可能会有所帮助.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 保护PDF文档不被URL直接访问全部内容,希望文章能够帮你解决php – 保护PDF文档不被URL直接访问所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。