str-replace致命错误:只能通过引用传递变量

时间:2014-10-03 16:54:50

标签: php pass-by-reference str-replace

我有这个代码作为在线游戏的反html和sql注入,但它没有工作,并给我以下错误:

    Fatal error: Only variables can be passed by reference

这是我的代码:

    $_POST = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39; ', '&#92;', $_POST);
    $_GET = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39;', '&#92;', $_GET);

这两行中的第一行,但我确定问题也适用于第二行。我不擅长php,这些是我从网上获取的文件。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您不需要实施自己的XSS过滤器,因为已经存在one

你可以通过这种方式利用这一点:

$_POST = filter($_POST);
$_GET = filter($_GET);

function filter(array $value) {
        return is_array($value) ? array_map(__FUNCTION__, $value) : htmlentities($value);

}

这也将过滤嵌套数组(如果您的输入类似于name[]

答案 1 :(得分:0)

也许是这样的:

$post_vars = array();

for ($i=0; i<count($_POST); $i++)
{
    $post_vars[$i] = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39; ', '&#92;', $_POST[$i]);
}

$ _GET数组也是如此。