Php 清理$\u POST变量

Php 清理$\u POST变量,php,security,post,variables,Php,Security,Post,Variables,我试图找到一种方法,用一个函数有效地清理所有POST并获取变量。下面是函数本身: //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($

我试图找到一种方法,用一个函数有效地清理所有POST并获取变量。下面是函数本身:

//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);
}
在我看来,这似乎应该奏效。但由于某种原因,它不会从我在表单中的一些复选框返回数组。他们一片空白

我已经在没有上面函数的情况下测试了我的代码,它工作得很好,我只想在那里增加一点安全性

谢谢

如果可能的话使用(php5+)它可以让它更干净,据我所知,你可以对使用它所需要的一切进行消毒和验证

您可以使用和(例如)标志来过滤整个post数组

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

W3S上有大量不同的过滤器选项可用。未选中的复选框不会发送到服务器


你可以做你想做的事

你所做的还不够。请参阅。

要使递归更加优雅,可以使用以下内容,例如:

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

如果可以的话,请使用filter-var,因为这类方法通常是不好的,不过只是一个例子;)

这是一种错误的清洁输入方式

如果您在进行数据库查询后仍想使用数据,但又不想在其中使用转义字符,那么将mysql转义应用于
$\u POST
$\u GET
中的所有内容将再次困扰您


在mysqli或PDO中使用参数化查询,您将永远不需要使用
mysql\u real\u escape\u string()!我以前从未见过这样的情况:)如果你有PHP5,这是最好的方法,如果你没有与数据库的连接,情况更糟。我已经在函数调用上方设置了连接,但你们不需要看到我在那里得到了什么。;-)请参阅:您应该避免尝试针对每个上下文清理所有内容。这只会妨碍您的应用程序,并在您想要重新创建丢失的功能时使其更难保护。这是禁用magic_quotes的一个合理原因。从某种意义上说,这是你在重新创造的东西。需要对要发送到的应用程序的输入进行清理。如果您是通过HTTP发送到浏览器,请针对HTTP和HTML对其进行清理。如果要将其发送到SQL DB,请对其进行SQL清理。对不起,我的意思是不推荐使用:谢谢您的帮助/建议!看起来我需要重新考虑我的流程。:-)