2013-07-11 85 views
1

我在网页上有一个表格,用户输入他们的姓名,姓氏,电子邮件地址和其他信息。然后,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?有没有一种方法或功能可以帮助解决这个问题?

为了清楚起见,我的目的是在不牺牲安全性的情况下削减代码行。

+0

没有结束数据是危险的,只要你财产逃避你的投入。 – samayo

回答

4

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

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

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

但实际上这只是为了防止有人滥发大量POST数据,并天真地将其存储在一个会话文件。

+0

TIL'array_intersect_key'。谢谢。 – Joey

0

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