【问题标题】:is it dangerous to store $_POST in $_SESSION?将 $_POST 存储在 $_SESSION 中是否危险?
【发布时间】:2023-04-07 20:42:01
【问题描述】:

我在网页上有一个表单,用户可以在其中输入他们的姓名、姓氏、电子邮件地址和其他一些信息。 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 中的原始方法的情况下,如何防止这种情况发生?有什么方法或功能可以帮助解决这个问题吗?

明确地说,我的目的是在不牺牲安全性的情况下减少代码行数。

【问题讨论】:

  • 没有什么是危险的,只要你的财产逃避你的输入。

标签: php session post


【解决方案1】:

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

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

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

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

【讨论】:

  • 直到array_intersect_key。谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多