我遇到了一个类似php缓冲区的问题。
ob_start();
header("Content-Type: audio/mpeg");
include "Death_Valley.mp3";
//header("Content-Disposition: attachment; filename='Death_Valley.mp3'");
echo ob_get_clean();
如果我使用file_get_contents而不是包含(这是二进制安全的),我得到了一个错误
解析错误:语法错误,意外的“}”
只是为了自我教育,这真的是非二元安全的问题吗?或者我错过了一些理解包括函数的东西?
发布于 2016-12-20 19:28:10
不,这不是二进制安全。如果遇到字节<=
、<?
或<?php
,就会破坏下载。
此外,如果黑客能够将自己的文件上传到您的服务器,您将看到远程代码执行漏洞(向mp3文件注入php代码)。Imgur或imageshack因为这个错误而被黑客攻击,一些白痴开发人员认为最好的方法是包含(‘image.jpg’);
做你想做的事的正确方法是
readfile("Death_Valley.mp3");
并删除ob_start(),它将在将文件分发给用户之前将整个文件填充到内存中,这既缓慢又需要内存。
最后的想法是:如果您正在使用apache/lighthttpd/nginx,您可能应该查看X-sendfile (lighthttpd/apache)或X重定向(nginx),这将比任何基于PHP的扩展(至少在Zend的PHP中)都要好得多。也许在HHVM php,idk中并不重要)
https://stackoverflow.com/questions/41249747
复制相似问题