目前我在构造函数中有一个类存储$_SESSION
中的变量。
我被告知不要将user_id
存储在$_SESSION
中,因为用户可以将ID更改为他喜欢的ID,然后从任何帐户自由访问网站。
相反,我已存储session_id
并创建了一个包含session_id
到user_id
的链接的表格。
我的问题是 - 操纵这些数据有多难?我的项目中也有一个商店系统,我意识到我无法将商店所有者ID之类的内容存储在$_SESSION
变量中。这将导致我每个页面查询数据库,至少是为了获取数据。
在$_SESSION
中存储此类信息的不安全程度如何?有没有人有更好的解决方案?
答案 0 :(得分:8)
谁告诉你这是错的;用户无法更改存储在$_SESSION
数组中的数据。用户可以编辑的是使用sessionid设置的cookie,以便PHP可以识别该用户。但是,他们无法真正将其更改为另一个用户的sessionid。你运行的唯一危险是,如果有人以某种方式获取用户的sessionid cookie,在这种情况下,他们可以将你的网站作为登录用户的姿势,但除了一些IP检查之外,你无能为力。
答案 1 :(得分:2)
谁告诉你这是错的。
会话数据存储在服务器上 - 它只能由作为服务器访问权限的人员更改,或者如果有人能够调用更改会话数据的脚本,并且只有他们可以调用的脚本才能更改是您可以控制的网站页面(只要您采取措施确保代码中没有缺陷)。
答案 2 :(得分:1)
会话数据由Web服务器存储在临时文件(默认情况下)或DB或其他位置(您可以配置它)。因此,如果您不向他提供对服务器的FTP / SSH访问,则最终用户无法更改$ _SESSION数据中的任何内容。他唯一能改变的是请求中的会话ID,但在这种情况下并没有什么不安全感。好吧,希望您的“顾问”能够阅读有关HTTP会话的更多信息以及它们的工作原理。