使用前保护$ _post和$ _get数据

时间:2015-05-13 08:28:27

标签: php sql post get code-injection

我有关于发布数据到我的应用的安全性的问题。我有一个代码,我从客户端捕获所有$ _POST和$ _GET数据,并将它们放入对象的数组中。然后将此对象传递给我需要访问某些类型数据的函数(GETS,POSTS,SESSIONS,某些配置等)。

我抓住了所有帖子并获得了这部分代码:

foreach ($_GET as $key => $value)   // STORE $_GET VALUES
        {
            $this->_get[$key] = $value;
        }

        foreach ($_POST as $key => $value)  // STORE $_POST VALUES
        {
            $this->_post[$key]  = $value;
        }

        foreach ($_SESSION as $key => $value)   // STORE $_SESSION VALUES
        {
            $this->_session[$key] = $value;
        }

        $this->_config = $config;

        unset($config); // CLEAR $CONFIG VALUES 

        unset($_GET, $_POST /*, $_SESSION */ ); // CLEAR $_GET, $_POST FOR SECURITY ISSUES

在该app文件的末尾,我将$ this-> _session反转回$ _SESSION,如下所示:

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }

我如何通过GETS和POSTS逃脱或做其他事情,以便他们可以安全地#34;跨应用程序使用。有时我使用这个访问数据库,或将数据写入数据库,但我不确定它是否安全。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在将值存储到对象中之前,您需要转义值, 我不确定你为什么要取消设置原始变量,但如果你这样做我会建议将其原始值存储在其他obj中 用于调试目的

private function escape($value){
// ... here you will have to escape the xss or sql injections
 return $escapedValue;

}

...

echo $this->Form->create('filename', array('action' => 'upload', 'type' => 'file'));
echo $this->Form->file('filename');

这里很高兴阅读有关安全的文章

PHP Security Cheat Sheet

答案 1 :(得分:1)

我建议您先将$_POST$_GET中的值进行过滤和清理,然后再将其存储为对象

查看documentationsanitize filters