在$ _SESSION中存储$ _POST是危险的吗?

时间:2013-07-11 19:33:28

标签: php session post

我在网页上有一个表单,用户可以在其中输入姓名,姓氏,电子邮件地址和其他信息。然后PHP检查此信息以查看是否存在任何恶意或奇怪的字符,检查用户的电子邮件是否已存在,以及其他常见功能。但是,这个问题与恶意用户输入无关。

我在以后的页面上使用$_SESSION来处理某些事情。

所以我最近一直这样做:

$_SESSION['info']['first_name'] = $_POST['first_name'];
$_SESSION['info']['last_name'] = $_POST['last_name'];
// this continues for many lines below...

我想这样做:

$_SESSION['info'] = array_values($_POST);

这有危险吗?我知道有人可以$ _POST大量的数据然后它最终被存储在我服务器的内存中。有可能被滥用吗?如果不编写更多代码而不是我用于将数据存储到$_SESSION的原始方法,我该如何防止这种情况?有没有一种方法或功能可以帮助解决这个问题?

要明确,我的意图是在不牺牲安全性的情况下减少代码行。

2 个答案:

答案 0 :(得分:4)

这并不比使用$_POST更危险,但如果您想要与原始效果相同,那么您应该放弃array_values并将$_POST分配给它。

就个人而言,我会定义一个预期要存储的密钥列表,并像这样使用它们:

$allowed_keys = ["first_name","last_name", /* ... */ ];
$_SESSION['info'] = array_intersect_key($_POST,array_flip($allowed_keys));

但实际上,这只是为了防止有人发送大量POST数据并将其存储在会话文件中。

答案 1 :(得分:0)

唯一的风险是完全填充会话存储(磁盘,内存,数据库),传递给$ _POST的数据可能以DoS结尾