Php 会话集成,这种方法安全吗?

Php 会话集成,这种方法安全吗?,php,security,laravel,asp-classic,Php,Security,Laravel,Asp Classic,用户使用默认的Laravel身份验证登录,该身份验证将加密的cookie放入浏览器,并将会话保存在数据库中 用户移动到一个经典的asp页面,在那里我检查cookie值,获取散列,然后通过会话id散列调用laravel应用程序 然后我在laravel中使用它来查看该id是否有活动会话,如果有,我将返回true,以便用户可以在经典asp中登录 在classic应用程序中的每个页面请求上,我检查db中的上次更新时间,并在每个页面上更新它。所有登录和注销都在laravel中完成,classic依赖数据库

用户使用默认的Laravel身份验证登录,该身份验证将加密的cookie放入浏览器,并将会话保存在数据库中

用户移动到一个经典的asp页面,在那里我检查cookie值,获取散列,然后通过会话id散列调用laravel应用程序

然后我在laravel中使用它来查看该id是否有活动会话,如果有,我将返回true,以便用户可以在经典asp中登录

在classic应用程序中的每个页面请求上,我检查db中的上次更新时间,并在每个页面上更新它。所有登录和注销都在laravel中完成,classic依赖数据库查看会话是否处于活动状态

我还会调用一个公共url来获取会话变量,并使用laravel添加会话变量,因为它都是加密的,使用经典的asp很难做到这一点

我看到的唯一风险是会话劫持,但我不认为这是比平常更高的风险

锁定我用来检查它是否是有效会话的laravel URL是否重要


我是不是错过了一个安全漏洞?

我不是安全专家,但我不认为这有什么问题。打包的Laravel数据库会话处理程序的工作方式相同。cookie包含引用数据库中记录的哈希。会话数据是base64编码的,但它既不在这里也不在那里。我认为您实际上可以避免使用自己的,而只使用Laravel的DatabaseSessionHandler

。。。我只是稍微深入地阅读了您的问题,并注意到了关于设置和检索会话数据的公共URL的部分。我认为这是一个非常糟糕的主意。主要是因为它将为最终用户提供一扇打开的门,允许他们读取和写入会话数据。这只能是一个糟糕的结局

正如我上面所说的,数据只经过base64编码,因此我相信您能够在asp中解析、读取和写入这些内容

编辑

好的。。。我想这是最后一次编辑了。数据经过php序列化,然后进行base64编码。这看起来可能会帮助你达到这个目的。如果没有,并且API端点是唯一的方法,请找到某种方法阻止最终用户访问它。

此方法安全吗? 根据你所说的,你可能没有打开任何安全漏洞。会话cookie本身在用户计算机上不是加密的,但您要确保它在他们的计算机和您的计算机之间以及在您的每台计算机之间是加密的。您应该确保已将设置为有助于防止通过传统的未加密传输(HTTP)意外发送cookie,但如上所述,这不会影响存储cookie本身

也就是说,您实际上是在劫持您自己的用户会话。虽然现在可能不会引入漏洞,但可能会削弱整个系统,这可能导致将来出现漏洞

有更好的方法吗? 这可能是一个愚蠢的问题,但你确定你需要参加会议吗?如果要在服务器之间切换凭据,听起来更像是要使用和废弃会话

使用访问令牌类似于使用会话,但您需要使您的服务无状态。这意味着您不再将有关登录用户的信息存储在任何特定的机器上,因此每次他们访问需要该信息的服务器时,您都需要从数据库中提取所需的任何信息

从长远来看,这是一件好事,因为当您不需要太多地担心会话的位置和内部内容时,可以更容易地扩展您的服务

是广泛使用的标准(,),并专门设计为易于使用。RFC很复杂,但是有一个日志,不用担心

OAuth2有一个轻微的缺点(如果你可以这样称呼它的话),那就是它必须发生在加密的连接上。如果您的用例不能保证通过SSL或(最好)TLS进行加密,那么您应该使用(WITH)

这是因为OAuth 2.0在请求中公开了它的“秘密”令牌,而OAuth 1.0只使用它来提供签名散列。如果您采用这种方法,建议使用其他人的库,因为散列非常具体

进一步改进 (注:本节在回答被接受后添加)

我最近一直在探索的一个系统是。这些存储有关用户的信息,以保存每台机器在数据库中反复查找的信息。因为令牌是用秘密散列的,所以您可以确保,只要您的秘密没有公开,有效的令牌就表示成功登录的用户,而不必接触数据库


如果可能的话,你应该避免在代币中放太私人的东西。如果必须在令牌中存储私有或机密信息,则可以对其进行加密,或者使用反向缓存代理将JWT交换为传统安全令牌。这一点在一开始似乎不符合目的,但这意味着您的某些服务可能根本不需要数据库访问。

除了会话劫持之外,没有。这是应用程序在内部进行交互的标准方式。当然,如果您选择数据库以外的其他类型的会话存储(例如Memcached),则可能有更好的方法获取数据。

有两种方法可以完成

  • 将频道设置为HTTPS。这将使在传输层上嗅探几乎不可能
  • 与其与cookie进行交互,您可以使用一个来完成此任务。这将帮助您在连接ASP系统时使用系统中的现有功能。您可以编写一个允许ASP连接的小型RESTWeb服务。你可以用这个。你可以参考这篇文章,它会让你知道应该如何做

如果您需要更多信息,请告诉我。

您是否在任何地方使用HTTPS,没有混合内容,