PHP包含二进制安全?

时间:2016-12-20 19:21:44

标签: php output-buffering

我遇到像这样的php缓冲区的问题

ob_start();
header("Content-Type: audio/mpeg");
include "Death_Valley.mp3";
//header("Content-Disposition: attachment; filename='Death_Valley.mp3'");
echo ob_get_clean();

如果我使用 include 而不是 file_get_contents (这是二进制安全的)我收到了错误

  

解析错误:语法错误,意外'}'

仅仅为了自我教育,它真的是非二元安全问题吗? 或者我错过了一些理解包含功能的东西?

1 个答案:

答案 0 :(得分:3)

好吧,不,它不是二进制安全的。如果遇到字节<=<?<?php,则会损坏下载。

此外,如果黑客能够将自己的文件上传到您的服务器,您就会查看远程执行代码漏洞(将php代码注入mp3文件。由于这个错误,Imgur或imageshack被黑了,有些白痴开发者决定最好的方法是包括(&#39; image.jpg&#39;);)

正确的做法是

readfile("Death_Valley.mp3");

并删除ob_start(),它会将整个文件填入内存,然后再将其发送给用户,这既缓慢又耗尽内存

最后的想法:如果你正在使用apache / lighthttpd / nginx,你应该查看X-sendfile(lighthttpd / apache)或X-Accel-Redirect(nginx),这比任何东西都要好得多。基于php(至少在Zend的PHP中。也许它在HHVM php,idk中并不重要)

相关问题