php会话cookie中的安全性


Security in php session cookies

我正在努力理解php中会话cookie的安全性。我已经读了很多关于它的书,但我仍然缺乏细节。我需要基础知识,有人来举例说明。

例如:我是否将session_regenerate_id()放在每个会话cookie之前?我还想些什么。如果可能的话,我会询问代码示例中的细节。

非常感谢。

我在登录后使用了4个会话cookie。

SESSION "site_logged_in" = true
SESSION "site_user_nr" = the number of the user to access user_table_nr
SESSION "site_user_id" = the user's id to use when changing data in tables
SESSION "site_user_name" = the name of the user to display on page

当我检查用户是否有访问权限时,我会检查是否设置了所有4个cookie,以及site_logged_in是否设置为true。

有更好的方法吗?我对此有完全错误的想法吗?用户很容易被黑客入侵吗?

事实上,您的网站中只需要一个会话。当您调用session_start()时,服务器上正在创建会话,用户会自动获得会话cookie。就像会话是放置在服务器上的某种容器一样,您可以在该容器中放置您想要的任何内容。然而,会话cookie只是访问服务器上该容器的一个密钥。

这意味着你可以安全地将一些数据放入$_SESSION中,只有拥有匹配会话id的cookie的用户才能读取它。

关于用户被黑客入侵。是的,只要你不使用HTTPS连接,他们就会被黑客入侵,因为cookie和所有其他数据都是以明文形式传输的,所以如果有人拦截用户cookie,他可以访问会话中存储的数据。

始终使用安全令牌记录用户。该安全令牌可以通过使用crypt()来生成。用户登录后,定期更改安全令牌,直到他们注销。还保留所有会话变量的服务器备份,包括安全令牌(在数据库中)。这也将帮助您跟踪用户登录历史记录。

还有一个个人建议:如果不使用任何哈希函数或类似crypt()的函数对数据库中的任何数据进行加密,就永远不要将其用作会话变量。

会话信息存储在服务器端。你应该检查他们是否已登录,以及他们是否存在/可以登录(以防删除/禁止)。

当你检查他们是否存在/是否可以登录时,你可以从数据库中提取其他信息,如名称、nr等。你真正需要的只是一个名为"logged_in_user"的密钥或存储登录用户ID的东西。正如Alex Amiryan所说,cookie是可以复制的,因此您可能还想存储会话中最后一个访问视图的IP地址,以便确保安全。