2012-12-12 80 views
1

可能重复:
What are the best PHP input sanitizing functions?PHP/MySQL的:过滤POST和GET数据

前阵子我发现这一点,我认为是伟大的,片段在某人的代码过滤POST和GET数据从注射。

function filter($data) { //Filters data against security risks. 
    $data = trim(htmlentities(strip_tags($data))); 
    if(get_magic_quotes_gpc()) $data = stripslashes($data); 
    $data = mysql_real_escape_string($data); 
    return $data; 
} 
foreach($_GET as $key => $value) $filterGet[$key] = filter($value); 
foreach($_POST as $key => $value) $filterPost[$key] = filter($value); 

而且我一直在使用它。但今天,在通过ajax发送数组时,我收到了很多错误。他们大多数说strip_tags() expects parameter 1 to be string, array given in...

过滤数据的最佳方法是什么?所有这些数据都将传送到数据库。但是那些不去数据库的情况呢?

+1

的不是错误消息清楚了吗? – itachi

回答

4

以下是你需要的功能:

function filter($data) { //Filters data against security risks. 
    if (is_array($data)) { 
     foreach ($data as $key => $element) { 
      $data[$key] = filter($element); 
     } 
    } else { 
     $data = trim(htmlentities(strip_tags($data))); 
     if(get_magic_quotes_gpc()) $data = stripslashes($data); 
     $data = mysql_real_escape_string($data); 
    } 
    return $data; 
} 
+0

也是一个很好的解决方法。 –

+0

你是对的,你也会过滤和多维数组。我必须改变正确的答案给你。这个更好。 –

1

如错误消息所示,这发生在数组通过GET/POST传递的情况下。您可以解析这些数组的每个值。

foreach($_GET as $key => $value){ 
    if(is_array($value)){ 
     foreach($value as $val){ 
      $filterGet[$key][] = filter($val); 
     } 
    } 
    else{ 
     $filterGet[$key] = filter($value); 
    } 
} 
+0

解决了它。谢谢。 –

+0

如果多维数组呢?它会抛出同样的错误! – Carlos

+0

而你的? –

0

你应该做的是首先检查是否$的数据是,你需要的是正确的格式。你描述的是一个数组被传递到你的函数的$数据参数,和PHP需要你把它分解成一个字符串。一些额外的逻辑需要,如:

function filter($data) { 
    if(is_array($data)) { 
     foreach($data as $key => $value) { 
      // Do stuff... 
     } 
    } else { 
     // Do stuff... 
    } 
} 
0

你应该检查输入数组。如果是这样,请将其循环并为每个数组成员剥离标签,如果不是这样,则只需为输入剥离标签。

0

可以用array_walk

<?php 
function wsafe(&$value,$key) 
{ 
    return safe($value); 
} 
function safe($value) 
{ 
    if(is_array($value)) 
    { 
     foreach($value as $key=>$val) 
     { 
      $value[safe($key)] = safe($val); 
     } 
    } 
    else 
    { 
     $value = trim(htmlentities(strip_tags($value))); 
     if(get_magic_quotes_gpc()) $value = stripslashes($value); 
     $value = mysql_real_escape_string($value); 
    } 
} 
array_walk($_POST,'wsafe'); 
array_walk($_GET,'wsafe');