0

因此,我在管理会话时从安全性中学到的是,最佳实践是将生成的会话 ID 保存到客户端 cookie 并将其余数据保存在服务器上。那么 $_SESSION 到底发生了什么?在官方 PHP 文档中,我发现只有很少的描述,没有说明什么。

我是否需要在服务器上的数据库中创建会话表,还是 $_SESSION 创建一些临时表并将所有需要的数据保存在那里?问题是我需要用大约建立良好可靠的系统。1000 个用户同时登录到服务器,所以我不知道“让”$_SESSION 完成所有工作有多好。

$_SESSION 是如何生成 ID 的?IP和浏览器的组合是一个ID吗?我的意思是,这样它不需要使用cookies的许可,而是它(服务器)为IP和浏览器保存一些ID,这是客户端没有任何会话数据或任何数据。这只是我的思考方式,但我不知道该怎么做,什么是正确的方法,所以你能帮帮我吗?

4

2 回答 2

1

$_SESSION为每个会话生成一个随机 ID,该 ID 不链接到 IP 或其他客户端信息,例如用户代理。

  • PHP 为用户生成一个 cookie,它包含会话 ID。

  • $_SESSION数组被序列化并保存到服务器上的文件中。

  • 当用户使用 PHP 会话 cookie 连接时,会检查 ID,然后可以从文件中反序列化 $_SESSION 数组。

从安全的角度来看,重要的是要注意 PHP 不会根据 IP 或用户代理验证用户,因此用户可能会窃取其他用户的 cookie 和会话数据。如果你想要这个功能,那么你可以很容易地实现一些东西,在会话数组中存储一个哈希值,并在会话恢复时检查它。

也可以编写自己的会话实现,您需要做的就是创建一个具有唯一 ID 的 cookie,然后正如您所提到的 - 将数据存储在数据库中。我个人更喜欢创建自己的UserSession课程,它让我可以完全控制。

于 2013-10-17T15:55:37.750 回答
0

关于会话的事情是它存储在其浏览器的客户端,所以如果你要创建 2 个网站并分配

 $_SESSION['logged']=1;//assign this in website 1 as value if logged
 $_SESSION['logged']=1;//assign this in website 2 as value if logged

您仍然可以登录这两个系统您是否还知道您可以使用名为 faceniff 的 android 应用程序会话劫持 Facebook 帐户,如果它没有“https”,就像通过创建相同的会话名称和值来伪装您是帐户持有人一样

我所做的是当用户登录时我分配一个 md5 哈希作为会话值并将其插入到数据库中用户的行然后检查数据库值是否等于浏览器会话所以数据库看起来像这样

id   username   password         session_code
1    imbatman   superman     12sd5%sda812312y34356 //note this md5 is only an example 
                                                  //but it looks like that but longer i think

并注销我清除数据库会话并销毁会话

id   username   password         session_code
1    imbatman   superman     

但我对 php 仍然很陌生,并且仍在寻找在我的网站上应用更多安全性的方法,但现在这就是我为防止渗透所做的事情

于 2013-10-17T16:04:37.763 回答