0

我在使用 Firefox 下载的文件上存在无效签名证书的问题。IE、Opera、Safari 和 Chrome 都很好。如果通过单击 FF 中的链接直接下载文件也可以,但如果使用 PHP 下载文件以确保安全,则文件会大 1 个字节,最后加上 x0A,我认为这会导致验证检查失败. PHP 非常简单:

<?php
$file = "../downloads/".$_GET['link'];
$size = filesize($file);
$type = filetype($file);
header('Content-Type: application/octet-stream'); 
header("Content-Transfer-Encoding: Binary");  
header( "Content-Disposition: attachment; filename=".basename($file));
header("Content-Length: ".$size); 
header("Content-Type: ".$type);
readfile($file);
?>

有谁知道为什么单独使用 Firefox 会在此处获取大小时遇到​​问题?感谢任何想法。

4

3 回答 3

4
  1. 检查文件是否存在并放置在允许的位置 - 现在攻击者能够下载您网络服务器上的几乎所有文件
  2. 不要使用关闭 phptag - ?>,它之后的每个空格都会发送到浏览器
  3. 在 readfile 之后使用exit;以确保没有调用其他产生输出的函数。
于 2012-03-10T08:39:19.457 回答
1

检查 Content-Type 标头,您设置了两次,因此将使用后者,由于函数 filetype(),它可能类似于“Content-Type:文件”,浏览器无法理解“文件”内容类型并将其作为文本文件。我想这就是额外 0x0a 的原因。
评论“header(”Content-Type:“.$type);” 它会正常工作。

于 2012-03-10T08:44:16.047 回答
0

替换下一行

<?php
header("Content-Length: ".strlen($file));
?>

祝你好运 :)

于 2012-03-10T08:38:05.367 回答