Php 使用jQuery创建下载按钮

Php 使用jQuery创建下载按钮,php,jquery,joomla,download,Php,Jquery,Joomla,Download,我目前使用PHP制作了一个下载按钮,但当您将鼠标放在链接上时,您可以看到要下载的文件的路径,这是不安全的,因为您可以更改路径并下载其他人的文件 我想隐藏这个路径,我相信最好的方法是使用jQuery(如果我错了,请纠正我) 这就是我所做的: <?php $nombredir = str_pad($this->item->id, 10, "0", STR_PAD_LEFT); $path = 'media'.DS.'com_cspartners'

我目前使用PHP制作了一个下载按钮,但当您将鼠标放在链接上时,您可以看到要下载的文件的路径,这是不安全的,因为您可以更改路径并下载其他人的文件

我想隐藏这个路径,我相信最好的方法是使用jQuery(如果我错了,请纠正我)

这就是我所做的:

<?php 
        $nombredir = str_pad($this->item->id, 10, "0", STR_PAD_LEFT); 
        $path = 'media'.DS.'com_cspartners'.DS.'documentation';
        $path = str_replace('/administrator','',$path);
        $nombrePDF = "/".$nombredir.'_'.JText::_('COM_CSPARTNERS_NOMBRE_DOCUMENTATION_CONTRACT');
        $facturaFile=$path.DS.$nombredir;
        $pdfAdjunto = $facturaFile.$nombrePDF; //This is path and file name which appears in the link.
?>

这是我的下载按钮/链接:

<a href="<?php echo $pdfAdjunto; ?>" class="btn btn-primary" id="jform_download_documentation" name="jform[download_documentation]"><?php echo JText::_("COM_CSPARTNERS_DOWNLOAD_DOCUMENTATION_BUTTON"); ?></a>

尝试以下操作:将单击事件绑定到锚定标记,并将
href
链接更改为
href=“#”

锚-

<a href="#" class="btn btn-primary" 
   id="jform_download_documentation" 
   name="jform[download_documentation]">
  <?php echo JText::_("COM_CSPARTNERS_DOWNLOAD_DOCUMENTATION_BUTTON"); ?>
</a>

例如,也许您应该使用另一个php脚本

<?php

 // generate file path using database or find file using PHP
 $path = '/some/path/';

 // get file name from dabatase, or set it as a const or param
 $filename= $_GET['filename']; // parase it for security

 // combine path and filename
$filename = $path.$filename;

 header("Content-disposition: attachment;filename=$filename");
 readfile($filename);
?>

将其保存为“download.php”,然后在创建下载按钮时,只传递一个参数。 下载链接应该是这样的:download.php?id=2323(数据库中的id:2323->“some_document.doc”)


下载/some-2323-file-然后parase param,获取ID,然后瞧:)没有人看到文件路径:)

URL永远都不安全。jQuery不会保护它(JS也永远不会保护某些东西)。为了保护下载URL的安全,您可以使用随机ID、哈希或人类猜不到的东西来隐藏真正的文件名。@KevinLabécot这是怎么做到的?我认为这里的问题不是按钮,而是文档。如果您的文档是doc1.pdf,那么很明显,一定有doc2.pdf文档。所以每个人都可以下载它。为了安全起见,在文档中添加一个随机字符串,如doc1_gz758gujf6.pdf,并为user2使用另一个字符串。@NicoMartin这也是个好主意,但我还是应该以某种方式隐藏路径为什么?如果你有你所有的文件,那应该没问题。。如果用户有doc1的链接,他无法下载doc2,因为之前没有下载doc2,他会将其添加到我的URL中:
/index.php/en/certification partner application/
。这是出现的完整URL:
/demo certifications/index.php/en/certification partner application/media/com_cspartners/documentation/000000000 1/000000000 1_partner%20Contract.pdf
这是我的按钮所在的链接:
/demo certifications/index.php/en/certification partner application
,看起来是在
index.php/en/
之后添加文件的链接会导致链接不正确。请查看页面的源代码并检查隐藏输入的值。
$(function(){
  $('#jform_download_documentation').click(function(e){
        e.preventDefault();
        window.location.href = $('#jform_download_documentation_hidden').val();
  });
});
<?php

 // generate file path using database or find file using PHP
 $path = '/some/path/';

 // get file name from dabatase, or set it as a const or param
 $filename= $_GET['filename']; // parase it for security

 // combine path and filename
$filename = $path.$filename;

 header("Content-disposition: attachment;filename=$filename");
 readfile($filename);
?>