【发布时间】:2015-05-13 08:28:26
【问题描述】:
我对发布到我的应用程序的数据的安全性有疑问。我有一个代码,我从客户端捕获所有 $_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
在该应用程序文件的末尾,我将 $this->_session 反转回 $_SESSION,如下所示:
foreach ($in->_session as $key => $value) // STORE $_SESSION VALUES
{
$_SESSION[$key] = $value;
}
如何使用GETS 和POSTS 逃避或做其他事情,以便它们可以“安全”地在应用程序中使用。有时我使用它来访问数据库,或将数据写入数据库,但我不确定它是否安全。
有什么建议吗?
【问题讨论】:
-
看起来您需要转义 db 注入和 xss 注入,我建议在将值存储到对象之前对其进行消毒,对于 sql 使用内置 sql 转义函数,对于 XSS,您将必须找到与您最相关的功能
-
你为什么要这样做?这种方法存在很多问题(已知的和可能的),我不知道从哪里开始。
-
@cosmo0:因为我想通过一个对象传递所有需要的数据,它是发布、获取、会话或配置设置的,并且只需在我需要的地方使用我需要的东西。但如果有更好的解决方案来实现这一点,我会使用 ti。
-
嗯,“将所有内容传递给单个对象”的概念被称为“大泥球”,并不是一个好的设计。我认为你最好重新考虑你的架构,但是如果没有看到更多的代码,我真的帮不了你(而且这对 SO 来说是题外话)。
标签: php sql post get code-injection