PHP:有效使用密码\u散列

PHP:有效使用密码\u散列,php,authorization,password-hash,Php,Authorization,Password Hash,对于(几乎)每个操作,一些Android应用程序都会对位于服务器上的php脚本执行查询,以发送/接收数据。对于每一个这样的查询,应用程序用户的用户名/密码都会传输到脚本中以供授权 但是,该脚本使用php的password_hash()函数在每次访问期间验证用户凭据。由于password_hash()速度较慢,这会导致糟糕的用户体验,因为应用程序需要很长时间,直到脚本处理/返回请求的数据到应用程序 我不知道如何处理这个问题 我打算使用的一种方法是,脚本除了发送用户名/密码外,还发送sessionI

对于(几乎)每个操作,一些Android应用程序都会对位于服务器上的php脚本执行查询,以发送/接收数据。对于每一个这样的查询,应用程序用户的用户名/密码都会传输到脚本中以供授权

但是,该脚本使用php的password_hash()函数在每次访问期间验证用户凭据。由于password_hash()速度较慢,这会导致糟糕的用户体验,因为应用程序需要很长时间,直到脚本处理/返回请求的数据到应用程序

我不知道如何处理这个问题

我打算使用的一种方法是,脚本除了发送用户名/密码外,还发送sessionID。然后,该脚本仅每隔X分钟和/或每Y个请求运行password_hash()函数,并更新sessionID(如果用户凭据有效)。在其他访问期间,仅当sessionID有效时才检查它。sessionID以纯文本形式保存在服务器上,因此检查速度很快

由于用户凭证和sessionID都可能受到第三方的猜测,因此在避免不允许的访问方面似乎没有太大区别

我所看到的建议方法的唯一缺点可能是sessionID以纯文本形式存储,以便第三方(以某种方式获得对数据库的访问权)可以读取它。但是,通过适当调整X和Y的值,可以降低这种风险,因此调整sessionID有效的时间段


这种方法有什么替代方法或缺点吗?

用访问令牌替换用户名/密码是一种非常常见的方法,可以提高安全性,因为

  • 无需为每个请求发送密码,并且
  • 因为令牌通常比用户密码强得多
  • 这就是身份验证服务的作用


    会话id类似于访问令牌,因为这里也不会为每个请求发送密码。会话id应该是强engough(例如,至少20个字符的随机序列0..9,1..z,a..z),这样它就不能被猜测,也不需要慢密码散列函数来存储。

    您需要一个数据库来存储用户的数据…将会话id存储到文本文件中不是一个好主意…请阅读以下内容: