使用Firefox在PHP下载的文件大小错误

时间:2012-03-10 08:25:04

标签: php firefox download code-signing-certificate

我在使用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应该在缩小尺寸方面遇到问题?感谢任何想法。

3 个答案:

答案 0 :(得分:4)

  1. 检查文件是否存在并放置在允许的位置 - 现在攻击者几乎可以下载您网络服务器上的每个文件
  2. 不要使用关闭的phptag - ?>,将其发送到浏览器后的每个空格
  3. 在readfile之后使用exit;以确保不会调用生成输出的其他函数。

答案 1 :(得分:1)

检查Content-Type标头,你设置它两次所以后者将被使用,它可能是类似“Content-Type:file”的东西,因为函数filetype(),浏览器无法理解“文件“内容类型并将其作为文本文件。我猜这是额外的0x0a的原因 注释“header(”Content-Type:“。$ type);”它会正常工作。

答案 2 :(得分:0)

替换下面的行

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