2015-02-24 45 views
2

我写了一个PHP函数,它记录了$_SERVER数组中的所有内容,并且如果某个$_SERVER变量不存在于我的数据库中,它将添加该列。

我的问题是这样的:这听起来有多安全?在对标题信息进行研究和理解后,会出现一些问题。

  1. 客户端是否可以修改发送到服务器的某些变量的浏览器代理或操作系统?
  2. 有人会从他们自己的服务器托管一个网站能够插入代码到他们自己的定制$_SERVER阵列?

总的来说,我只是问这听起来有多安全,但这些是首先想到的问题。

如果您发现我提出这个问题的方式有问题,请在投票前发表评论,我会立即改变它。

+1

万维网服务器确定哪些是'$ _SERVER',如果你信任你的Web服务器,你可以信任'$ _SERVER' 。你为什么要在'$ _SERVER'中记录所有内容?大部分是无用的信息。 – Halcyon 2015-02-24 18:13:25

+0

只为我自己的统计数据和好奇心。它将在数百台Web服务器上运行,其中一些我不知道它的主人。 – luckybroman5 2015-02-24 18:17:35

+1

这听起来像个不好的主意。我不会做你想做的事。我会寻找一个不同的解决方案,无论你想解决什么问题。 – Halfstop 2015-02-24 18:18:00

回答

3

$_SERVER可以不可以被信任。 $_SERVER['HTTP_USER_AGENT']包含一个易于用户配置的字符串 - 可以使用SQL注入。甚至有为此目的的浏览器插件。实际上,用户可以更改很多变量,例如$_SERVER['HTTP_ACCEPT_LANGUAGE']

看一看在Chrome插件ModHeader

enter image description here

+0

这个答案正是我一直在寻找的!所以这里是我的后续问题: 假设我使用准备好的语句或转义字符串来将数据存储在我的SQL服务器中,我是否仍然容易受到注入? 据我所知,它不会对数据倾斜做什么,但是... – luckybroman5 2015-02-25 03:45:55

+1

我在我的项目中使用[prepared statements](http://stackoverflow.com/a/60496/4193263)。使用预准备语句时,您不会受到SQL注入的攻击,请参阅我链接到的答案以获取更多信息。 – ByteHamster 2015-02-25 05:27:58

2

的$ _SERVER变量使用PHP返回有关基于服务器的信息,它不是存储数据的地方。说实话,这是第一次听到有人想用超全局的$ _SERVER存储数据。也许你应该使用$ _SESSION?我认为这是正确的方式来存储数据,如果数据库不是一个选项...

此外$ _SERVER数组似乎刷新每次您重新加载页面。而@ByteHamster指出的$ _SERVER变量中的一些值可能会被篡改。

的一点是,你要使用一些东西,是不是为此目的设计的...

+0

我没有使用它来存储数据,只是收集它并将其存储到SQL服务器中,然后进行分析。尽管谢谢你的回答! – luckybroman5 2015-02-25 03:44:01