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的代码的情况下防止这种情况发生?有没有一种方法或功能可以帮助解决这个问题?

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

4

2 回答 2

4

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

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

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

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

于 2013-07-11T19:36:03.623 回答
0

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

于 2013-07-11T19:39:49.580 回答