在PHP会话中保存用户信息的安全漏洞


Security vulnerability from saving user info in PHP sessions?

我正在创建一个以RESTful api为中心的web应用程序。一旦用户登录,他们将收到一个会话id和登录密钥,用于访问他们的数据,直到他们的会话到期。如果会话保存在内存中,web应用程序(可能还有移动应用程序)将在每次页面加载时调用API来获取用户信息。我正在尽我所能地优化这个API调用,我想知道缓存这个信息是否有意义。

每个包含用户数据的表都包含一个更新的时间戳(在每次Postgres更新时触发)。因此,我可以修改API以接受可选的cache_timestamp参数。API将首先检查自该时间戳以来是否有任何用户数据表被修改过。如果有,那么它将返回更新的用户数据;如果不是,它将返回一个未修改的304,并且应用程序将使用缓存。

我的问题是什么信息太敏感而不能保存在内存中(使用PHP会话)。目前,这些信息包括个人资料(姓名、公司等)、联系方式(电子邮件、电话)、设置(时事通讯、通知)和支付信息(计划、试用和一个指向Stripe的客户ID)。

我认为唯一处于边缘的是支付信息,但除非我的API密钥被泄露,否则他们不应该能够从Stripe访问任何数据。

我不是安全专家,但由于会话存储在服务器上,攻击者访问数据的唯一方法是已经获得了一些特权。

你可以看看这篇有趣的文章PHP会话固定/劫持关于如何保护更多的会话。

如果用户的会话被劫持,那么没有什么可做的,攻击者将访问数据,就像它是有问题的用户一样。

如果攻击者可以利用与您的服务器相关的故障,那么他应该能够读取会话数据(默认情况下,会话数据被序列化存储在一些文件中)。

所以,加密敏感数据,可以防止他读取原始数据

我的观点也是一样的,支付信息应该存储在会话变量中,但是你说没有API密钥就无法访问。我想你在安全的身边。