过滤获取和发布值

时间:2012-07-18 22:17:11

标签: php post filter get

我在其中调用我的主页framework_ui.php我需要auth.php,其中我有一个过滤功能。

function filter($data)
{
   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes) {
       $data = stripslashes($data);
   }
   // normalize $data because of whitespace on beginning and end
   $data = trim($data);
   // strip tags
   $data = strip_tags($data);
   // replace characters with their HTML entitites
   $data = htmlentities($data);
   // mysql escape string    
   $data = mysql_real_escape_string($data);
   return $data;
}

在每个带有get和post变量的页面上我都做了:(并调用我的framework.php)

// filter GET values
foreach ($_GET as $key => $value) {
    $get[$key] = filter($value);
}
// filter post
foreach ($_POST as $key => $value) {
    $post[$key] = filter($value);
} 

如果我将上述功能设为上述功能并在每个页面上调用该功能,该功能是否仍能正常运行?

function filter_all() {
// filter GET values
foreach ($_GET as $key => $value) {
    $get[$key] = filter($value);
}
// filter post
foreach ($_POST as $key => $value) {
    $post[$key] = filter($value);
}
}

我知道这不是最安全的方式,但是我想知道这种事情是否可能并且不会对我的代码产生负面影响。

2 个答案:

答案 0 :(得分:2)

你的filter_all()函数什么都不返回,它不会修改$ _GET和$ _POST全局变量,所以在你的函数完成运行那些原始变量后,你的foreach循环将实际上是相同的。您应该直接操作$ _GET / $ _ POST或全局$ get / $ post如果您打算使用它们或返回两者的某种组合。除此之外,没有必要对你的计划做什么负面的。

如果你打算这样做,每次都不能创建一个函数,只需要包含一个文件(比如你的framework_ui.php),它只是循环并过滤变量。

zerkms是正确的,虽然你的过滤器功能并不理想,因为它不安全,事实上如果你计划重新显示用户提交的信息(以及许多其他事情),mysql_real_escape_string会引起问题。

引用OWASP ESAPI项目页面:

  

不要编写自己的安全控件!在为每个Web应用程序或Web服务开发安全控件时重新发明轮子会导致浪费时间和大量安全漏洞。 OWASP企业安全API(ESAPI)工具包可帮助软件开发人员防范与安全相关的设计和实现缺陷。 http://code.google.com/p/owasp-esapi-php/

答案 1 :(得分:1)

您只需进行一些调整,以确保代码的其余部分可以使用“已过滤”值。有几种方法可以做到,将它们标记为global或返回它们;可能第二种选择通常被认为是更清洁的。这是一个例子:

function filter_all() {
    $get  = array();
    $post = array();

    // filter GET values
    foreach ($_GET as $key => $value) {
        $get[$key] = filter($value);
    }
    // filter post
    foreach ($_POST as $key => $value) {
        $post[$key] = filter($value);
    }
    return array(
            'get'  => $get,
            'post' => $post);
}

$aFilteredInput = filter_all();
$get  = $aFilteredInput['post'];
$post = $aFilteredInput['post'];