我在网页上有一个表单,用户可以在其中输入姓名,姓氏,电子邮件地址和其他信息。然后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 :(得分: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结尾