PHP手册包含以下示例:
<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
exit;
?>
重要的一点是,您必须发送Content-Type标头。另外,您必须注意不要在<?php ... ?>
标签之前或之后在文件中包含任何多余的空格(例如换行符)。
如注释中所建议,可以通过省略?>
标签来避免脚本末尾出现多余空格的危险:
<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
您仍然需要小心避免在脚本顶部使用空格。一种特别棘手的空白形式是UTF-8 BOM。为避免这种情况,请确保将脚本另存为“ ANSI”(记事本)或“ ASCII”或“ UTF-8无签名”(Emacs)或类似名称。
<img src='test.php?image=../config.php' />
即可避免类似的攻击