对于(几乎)每个动作,某些Android APP会对位于服务器上的php脚本执行查询,以发送/接收数据。对于每个此类查询,出于授权目的,会将APP用户的用户名/密码传输到脚本。
但是,该脚本使用php的password_hash()函数在每次访问期间验证用户凭据。由于password_hash()速度较慢,这会导致不良的用户体验,因为在脚本处理/将请求的数据返回给APP之前,APP需要很长时间。
我想知道如何处理这个问题。
我打算使用的一种方法是该脚本除了发送用户名/密码外,还发送一个sessionID。该脚本反过来每隔X分钟和/或每隔Y个请求运行一次password_hash()函数,并更新sessionID(如果用户凭据有效)。在其他访问期间,仅检查sessionID是否有效。 sessionID以纯文本格式保存在服务器上,因此此检查很快。
由于用户凭据和sessionID都可能会受到第三方的猜测,因此在避免不允许的访问方面似乎没有太大的区别。
我所看到的建议方法的唯一缺点可能是sessionID以纯文本存储,因此可以由第三方读取(以某种方式获得对数据库的访问)。但是,可以通过适当调整X和Y的值来减少这种风险,从而调整sessionID有效的时间。
这种方法是否有替代方案或缺点?
答案 0 :(得分:0)
用访问令牌替换用户名/密码是一种非常常见的方法,它可以提高安全性,因为
这毕竟是像OAuth2这样的身份验证服务所要做的。
会话ID与访问令牌类似,因为在此会话中也不为每个请求发送密码。会话ID应该足够强(例如,至少20个字符的随机序列0..9,1..z,A..Z),因此无法猜测它并且不需要缓慢的密码哈希函数存储。