清洁$ _ POST变量[复制](cleaning $_POST variables [duplic

2019-08-31 13:50发布

这个问题已经在这里有一个答案:

  • 不要用htmlspecialchars和mysql_real_escape_string保持我的PHP代码从注射安全吗? 6个回答

我试图想出一个办法来有效轻松地清洁所有的POST和一个单一的功能GET变量。 这里的函数本身:

//clean the user's input
function cleanInput($value, $link = '')
{
    //if the variable is an array, recurse into it
    if(is_array($value))
    {
        //for each element in the array...
        foreach($value as $key => $val)
        {
            //...clean the content of each variable in the array
            $value[$key] = cleanInput($val);
        }

        //return clean array
        return $value;
    }
    else
    {
        return mysql_real_escape_string(strip_tags(trim($value)), $link);
    }
}

而这里的,将调用它的代码:

//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
    $_POST[$key] = cleanInput($value, $link);
}

//This stops SQL Injection in GET vars
foreach ($_GET as $key => $value)
{
    $_GET[$key] = cleanInput($value, $link);
}

对我来说,这似乎像它应该工作。 但是,由于某种原因,它不会从一些复选框我有一个形式返回数组。 他们让出来的空白。

我测试过我的代码没有上述功能,它工作得很好,我只是想将一只股票的加入位在那里。

谢谢!

Answer 1:

你在做什么是不够的。 见这里 。



Answer 2:

使用filter_input (如果可能PHP5 +),它保留了很多清洁和尽可能即时知道你可以清理和验证,你可以需要在使用它的一切。

您可以使用过滤器变种阵列和例如FILTER_SANITIZE_STRING标志过滤后整体阵列

filter_var_array($_POST, FILTER_SANITIZE_STRING) //just an example filter

上有W3Schools的可用不同的滤波器选项负荷过滤器参照



Answer 3:

使递归更优雅,你可以使用类似array_map例如:

$_POST = array_map('mysql_real_escape_string',$_POST);

使用过滤器变种,如果你可以,虽然这些种类的方法一般都是坏的,只是一个例子,虽然;)



Answer 4:

选中复选框不会被发送到服务器。

你可以使用array_walk_recursive做你想要什么



Answer 5:

这是错误的方式去清扫输入。

运用毯子MySQL的逃逸绝对一切都在$_POST$_GET是要回来,咬你,如果你仍然想使用这些数据,您已经有了一个数据库查询,但你不希望在那里转义字符之后。

使用与库MySQLi或PDO参数化查询,你将永远不会需要使用mysql_real_escape_string()



文章来源: cleaning $_POST variables [duplicate]