我正在构建一个需要使用 php 服务进行身份验证的 android 应用程序。我目前的方法是当用户最初登录时,使用 uniqid() 生成一个唯一的 id。然后这个 uid 连同他们的用户名一起存储在数据库的一个表中。然后用户被传回这个 uid。
随后对服务器的所有进一步请求将发送 uid 及其用户名,然后将在数据库中检查以验证用户。
这种方法可以吗?还是我错过了他们的巨大安全漏洞?
我正在构建一个需要使用 php 服务进行身份验证的 android 应用程序。我目前的方法是当用户最初登录时,使用 uniqid() 生成一个唯一的 id。然后这个 uid 连同他们的用户名一起存储在数据库的一个表中。然后用户被传回这个 uid。
随后对服务器的所有进一步请求将发送 uid 及其用户名,然后将在数据库中检查以验证用户。
这种方法可以吗?还是我错过了他们的巨大安全漏洞?
这里有几个问题。因为一个uniqid()
几乎完全由时间戳组成,并且非常可预测。而不是只是重新发明轮子,您应该只使用 PHP 的session_start()
. 如果由于某种原因您不能使用 PHP 的会话,则使用session_id()
.
其他问题,如果您的应用程序遭受 sql 注入攻击,那么攻击者可以将会话 ID 从数据库中提取出来并登录。密码散列的原因是为了在数据库被破坏后减缓攻击者的速度,如果攻击者拥有会话 ID,那么他不必破解密码散列即可登录。(您正在对密码进行哈希处理...)一种选择是aes_encrypt()
在存储的会话 ID 上使用 MySQL。