如何附加流过滤器以进行回显?

时间:2009-06-17 13:35:32

标签: php filter stream xss

有没有办法将流过滤器连接到echo,以便所有回显的数据都通过流过滤器?我的想法是编写一个输出转义过滤器以防止XSS。

我发现了这个错误报告http://bugs.php.net/bug.php?id=30583,但它是从2004年开始的,我不知道现在是否可以。

class strtoupper_filter extends php_user_filter 
{
  function filter($in, $out, &$consumed, $closing)
  {
   while ($bucket = stream_bucket_make_writeable($in)) {
     $bucket->data = strtoupper($bucket->data);
     $consumed += $bucket->datalen;
     stream_bucket_append($out, $bucket);
   }
   return PSFS_PASS_ON;
  }
}
stream_filter_register("strtoupper", "strtoupper_filter");

$fp = fopen("php://output", "w");
stream_filter_append($fp, "strtoupper");

echo "echo: testing 123<br>";
print("print: testing 123<br>");
fwrite($fp, "fwrite: testing 123<br>");

2 个答案:

答案 0 :(得分:1)

您可以对任何过滤器作业使用输出缓冲。

<?php
function my_filter($data) {
    return strtoupper($data);
}
ob_start('my_filter', 4096);
echo 'test';
ob_end_flush(); // Or end of script

任何更复杂的例子都是可能的。

答案 1 :(得分:0)

您可以随时使用包含过滤器的特殊“回声”功能。然后用自定义函数替换代码中的所有echo。

<?php
function filtered_echo($data) {
    // filter $data here
    echo $data;
}
?>
相关问题